31-05-2010, 06:48 PM
Une méthode de 500 lignes, c'est 10 fois trop à mon sens. Quand tu arrives au bout, tu ne sais plus ce qui s'est fait au début. Le maximum que je m'autorise, c'est 50 lignes, et c'est vraiment réservé aux méthodes les plus longues, typiquement actions des contrôleurs.
Mon crédo, c'est que le rôle d'une méthode doit pouvoir être résumé en 2 lignes.
Et tout ça dépend en plus beaucoup du langage utilisé (en Java ou en Dotnet, on aura tendance à avoir plus de ligne qu'en Ruby, Python ou même en PHP) !
Voici par exemple la méthode has_enough_resources_to_repair? de ma classe User.
Et la méthode repair de la classe Building.
Déjà que cette dizaine de ligne n'est pas forcément agréable à lire, imagine si tu dois scroller !
Je pense que quand on fait de l'objet, il ne faut pas hésiter à faire plein de petits méthodes. Cf. la classe Building de Spherium. Ça ne coûte rien et ça clarifie le code en plus d'éviter les duplications inutiles.
Sephi-Chan
Mon crédo, c'est que le rôle d'une méthode doit pouvoir être résumé en 2 lignes.
Et tout ça dépend en plus beaucoup du langage utilisé (en Java ou en Dotnet, on aura tendance à avoir plus de ligne qu'en Ruby, Python ou même en PHP) !
Voici par exemple la méthode has_enough_resources_to_repair? de ma classe User.
def has_enough_resources_to_repair?(building)
update_resources!
energy_count >= building.repair_cost
end
public function hasEnoughResourcesToRepair($building){
$this->updateResources();
return $this->getEnergyCount() >= $building->getRepairCost();
}
Et la méthode repair de la classe Building.
def repair
return false unless user.has_enough_resources_to_repair?(self)
Building.transaction do
user.energy_count -= repair_cost
user.save!
self.hit_points = maximum_hit_points
save!
end
true
end
public function repair(){
if(!$this->getUser()->hasEnoughResourcesToRepair($this) return false;
$this->getDb()->startTransaction(); // Une ligne pour ouvrir la transaction.
$this->getUser()->decreaseEnergyCount($this->getRepairCost());
$this->getUser()->save();
$this->setHitPoints($this->getMaximumHitPoint());
$this->save();
$this->getDb()->stopTransaction(); // Une ligne pour fermer la transaction.
return true;
}
Déjà que cette dizaine de ligne n'est pas forcément agréable à lire, imagine si tu dois scroller !
Je pense que quand on fait de l'objet, il ne faut pas hésiter à faire plein de petits méthodes. Cf. la classe Building de Spherium. Ça ne coûte rien et ça clarifie le code en plus d'éviter les duplications inutiles.
Sephi-Chan