Quand un cours de colle ou de gestion en fait-il trop?

10

Je suis enclin à créer des classes centralisées qui gèrent les autres classes dans mes conceptions. Il ne stocke pas tout lui-même, mais la plupart des demandes de données iraient d'abord au "gestionnaire". En regardant une réponse à cette question, j'ai remarqué le terme "objet divin". Wikipédia le répertorie comme un contre-motif, naturellement.

Où est la frontière entre une classe ou un module de colle légitime, qui transmet des données et des messages d'un endroit à l'autre, et une classe qui en fait trop?

jprete
la source

Réponses:

15

Beaucoup de gens disent des choses comme "une classe ne devrait jamais être plus grande que ta tête".

Cependant, je viens de participer à une discussion avec de très bons programmeurs de classe mondiale sur ce même sujet. J'en ai parlé avec l'un des gars de Naked Objects. Pour autant que nous le sachions, parfois, cela se produit, et il n'y a pas beaucoup de moyen de le contourner.

Normalement, cependant, la seule classe à laquelle cela se produit est un objet de domaine qui représente l'élément fondamental de votre domaine - un compte bancaire, une vente au détail, etc. Si vous trouvez que cela arrive à d'autres classes aussi, vous avez probablement veulent considérer la responsabilité de cette classe. Voici mes conseils:

  • Si cela s'appelle "Manager", "Helper" ou "Service", il y a de fortes chances qu'il soit trop grand. Une fois que vous aurez réellement déterminé quelle devrait être la responsabilité d'une classe, vous trouverez plus facile de déléguer les autres responsabilités.
  • S'il s'appelle "Controller", il devrait être responsable du contrôle de l'interaction entre un tas d'autres classes ... et rien d'autre.
  • Si elle est le passage de données et de messages entre les différents noeuds physiques alors soit il doit faire face à la conversion d' un message spécifique à une forme sérialisée, ou il gère le mécanisme de transfert. Par exemple, vous pouvez avoir une classe qui convertit une transaction bancaire en XML et une autre classe qui envoie ce XML sur HTTP.
  • S'il passe des événements entre différents modules dans une application, il devrait être responsable de dire aux auditeurs quand un événement est déclenché, et rien d'autre.

En règle générale, si c'est trop grand, voyez si vous pouvez déléguer des responsabilités à une autre classe, et si vous ne pouvez pas, c'est probablement OK.

Lunivore
la source
Bonne réponse avec des directives concrètes utiles. J'ai tendance à créer des classes comme celle-ci pour les objets de domaine où toutes, ou presque toutes, les données représentent un aspect du domaine et je veux pouvoir le traiter comme une unité. Ensuite, j'ai tendance à déléguer les responsabilités réelles aux classes qui ne sont vraiment instanciées qu'à l'intérieur de la grande classe. Je suis donc assez proche de la ligne, et je devrais probablement pencher vers la réduction des classes individuelles lorsque je l'écris.
jprete