Question

Je suis trouve que j'ai plusieurs endroits ayant des classes internes statiques publiques conçues qui étendent les classes « aide » fait mon code beaucoup plus sûr et le type, à mon avis, lisible. Par exemple, imaginez que j'ai une classe « SearchCriteria ». Il y a beaucoup de points communs pour les différentes choses que je recherche pour (un terme de recherche, puis un groupe de types de terme de recherche, une plage de dates, etc.) en l'étendant dans une classe interne statique, je bien deux l'extension et la interrogeable classe avec les différences spécifiques. Ce semble comme une mauvaise idée en théorie (Tight couplage Bad!) Mais l'extension est spécifique à cette classe interrogeable (une classe, un but).

Ma question est, dans votre expérience, a l'utilisation des classes internes statiques (ou quel que soit votre langue equivelent est) en votre code plus lisible / maintenable ou a ce fini par vous mordre dans le EOF?

En outre, je ne suis pas sûr que ce soit matériel wiki communautaire ou non.

Était-ce utile?

La solution

me Semble tout à fait raisonnable. En rendant une classe interne, vous rendant facile à trouver et un candidat évident pour examen lors des changements de classe consultable.

couplage étroit est seulement mal quand vous quelques choses qui ne sont pas vraiment appartenir ensemble juste parce que l'un d'entre eux arrive d'appeler l'autre. Pour les classes qui travaillent en étroite collaboration, par exemple quand, comme dans votre cas, l'un d'entre eux existe pour soutenir l'autre, puis on l'appelle la « cohésion », et il est un bonne chose .

Autres conseils

Notez que la classe n'est pas l'unité de réutilisation. Par conséquent, un certain couplage entre les classes est normal et attendu. L'unité de réutilisation est généralement une collection de classes connexes.

En Python, nous avons une variété de structures.

  1. Forfaits. Ils contiennent des modules. Ce sont essentiellement des répertoires avec un peu de machines Python jeté.

  2. Modules

    . Ils contiennent des classes (et fonctions). Ce sont des fichiers; et peut contenir un certain nombre de classes étroitement liés. Souvent, l'activité « classe interne » est traitée à ce niveau.

  3. Classes

    . Ceux-ci peuvent contenir des définitions de classe interne ainsi que des fonctions de méthode. Parfois (pas très souvent) les classes internes peuvent effectivement être utilisées. Cette situation est rare, puisque le couplage au niveau du module entre les classes est généralement parfaitement clair.

La seule mise en garde à l'utilisation des classes internes est en vous assurant que vous n'êtes pas vous répéter partout - comme - assurez-vous, lorsque vous définissez une classe interne, vous n'allez avoir besoin d'utiliser cette fonctionnalité nulle part ailleurs et que cette fonctionnalité est nécessairement associée à la classe externe. Vous ne voulez pas finir avec un tas de classes internes que tout mettre en œuvre la même méthode exacte setOrderyByNameDesc().

Le point « couplage lâche » est de garder les deux classes séparées de sorte que s'il y a des changements de code dans votre rien classe « SearchCriteria » devrait être le changement dans les autres classes. Je pense que les classes internes statiques dont vous parlez pourraient rendre le code maintien d'un cauchemar. Un changement de SearchCriteria pourrait vous envoyer chercher à travers toutes les classes statiques pour déterminer ceux qui sont maintenant brisés à cause de la mise à jour. Personnellement, je resterais loin de tout ces classes internes à moins qu'il soit vraiment nécessaire pour une raison quelconque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top