Clause de non-responsabilité:Ce qui suit ne sont pas des règles strictes. Ce ne sont que mes opinions et préférences personnelles. Personnellement, je trouve que cela rend mon code plus facile à lire et plus facile à maintenir.
D'abord une question. Où avez-vous rencontré ce conseil? Ont-ils fourni une justification? D'après mon expérience, j'ai normalement utilisé des énumérations imbriquées privées pour améliorer la lisibilité et la maintenabilité de mon code. Cela est particulièrement important lorsque vous effectuez une intégration avec un autre système et que vous devez envoyer des chaînes ou des nombres spécifiques. Je trouve que l'utilisation d'une énumération rend les choses plus faciles à lire et à maintenir. Dans ce cas précis, l'information transmise par l'énumération est limitée à la classe (c'est-à-dire qu'elle n'a aucun sens en dehors de la classe et personne d'autre ne devrait en avoir besoin).
Je ne peux pas penser à une raison définitive qui dit pourquoi les énumérations internes publiques sont une mauvaise pratique. Mais voici les raisons pour lesquelles je ne suis pas (normalement) les utiliser:
- Si l'ENUM est publique, cela signifie essentiellement qu'il transmet l'information dans une plus grande portée (par exemple, est logique en dehors de la portée de la classe parente et cela signifie probablement que d'autres choses l'utilisent). Si tel est le cas, alors il pourrait être plus logique d'en faire une énumération autonome. Je trouve
ThirdPartyResponseCodes.Success
plus facile sur les yeux plutôt que ThirdPartyIntegrationInterface.ThirdPartyResponseCodes.Success
. Il n'y a aucune raison pour laquelle vous ne pouvez pas nommer l'énumération de manière appropriée pour fournir un contexte et en faire ainsi une énumération autonome.
- J'imagine que les mêmes raisons de ne pas utiliser les classes internes publiques s'appliquent également aux énumérations publiques internes. Tout d'abord, si vous avez une classe interne, cela peut signifier que votre classe externe pourrait bénéficier d'un refactoring. Peut-être votre classe extérieure essaie-t-elle d'en faire trop?D'un autre côté, il y a l'avantage de l'encapsulation et de la limitation de la portée, surtout si vous pouvez faire valoir que la classe interne n'a de sens que dans le contexte de la classe externe (ce qui devrait aller de soi). S'il s'agit d'une classe interne publique, cela signifie probablement que sa portée s'étend au-delà de la classe externe et qu'elle devrait donc être retirée.
- Si vous avez vraiment besoin d'utiliser une énumération imbriquée publique, vous devez documenter exactement pourquoi vous en auriez besoin (je n'ai pas encore trouvé de raison de le faire) et pourquoi il est préférable de le laisser comme enum et non une énumération publique autonome.
Où avez-vous lu à ce sujet? pouvez-vous pointer vers cet article? –
Quand vous dites que vous avez "rencontré" ce stadard. Comment et où. Sûrement, partout indiqué, il aurait donné un certain raisonnement. – David
Malheureusement, je ne peux pas créer un lien vers la source car il s'agissait d'un e-mail interne à l'entreprise. Le raisonnement était bref et a mentionné le fait de faciliter le débogage et de suivre les conventions de Java. – AEW