Je viens de lire sur ce sujet dans Le Bien fondé Rubyist (grand livre, par la voie). L'auteur fait un meilleur travail en expliquant que je ne le ferais donc je vais le citer:
Pas de règle unique ou la formule est toujours la bonne conception. Mais il est utile de garder un
quelques considérations à l'esprit lorsque vous êtes à faire des contre-module de décisions:
Les Modules n'avez pas de cas. Il s'ensuit que les entités ou les choses sont généralement mieux
modélisé dans les classes, et les caractéristiques ou les propriétés d'entités ou de choses sont
mieux encapsulé dans des modules. En conséquence, comme indiqué dans la section 4.1.1, classe
les noms ont tendance à être des noms, alors que les noms de module sont souvent des adjectifs (Pile
rapport Stacklike).
Une classe peut avoir qu'une seule super-classe, mais on peut mélanger dans autant de modules qu'il souhaite. Si
vous êtes à l'aide de l'héritage, de donner la priorité à la création d'un bon super-classe/sous-classe
relation. Ne pas utiliser une classe, le seul super-classe de la relation à
doter la classe avec ce qui est peut-être juste un de plusieurs ensembles de caractéristiques.
Un résumé de ces règles dans un exemple, voici ce que vous ne devriez pas faire:
module Vehicle
...
class SelfPropelling
...
class Truck < SelfPropelling
include Vehicle
...
Plutôt, vous devriez faire ceci:
module SelfPropelling
...
class Vehicle
include SelfPropelling
...
class Truck < Vehicle
...
La deuxième version des modèles les entités et les propriétés beaucoup plus proprement. Camion
descend du Véhicule (ce qui est logique), alors que SelfPropelling est une caractéristique de véhicules (au moins, tous ceux que nous aimons dans ce modèle du monde)-une caractéristique qui est transmise aux camions en vertu de Camion à un descendant, ou spécialisés
la forme du Véhicule.