Un collègue de travail de la mine a tendance à concevoir des classes comme:Où pourrais-je trouver un argument concis et bien écrit contre cet anti-pattern d'initialisation, et éventuellement d'autres?
class ImportantClass
{
public SomeClass ImportantField;
public SomeOtherClass OtherImportantField;
// etc.
}
Il va écrire aucun constructeur. Ensuite, partout où il instancie ce type son code ressemblera à ceci:
ImportantClass x;
try
{
// This is problematic enough to begin with, as every field (which is public)
// is set manually, which causes code duplication wherever this type is
// instantiated as well as maintenance problems in the event new fields are
// introduced or internal implementation is changed.
x = new ImportantClass();
x.ImportantField = new SomeClass();
x.OtherImportantField = new SomeOtherClass();
}
catch (Exception ex)
{
// ...what's even worse: now x can easily be in a totally invalid state,
// with some fields initialized and some not.
HandleAnyException(ex);
}
Il est évident que ce qui précède est un exemple simplificatrice (et exagérée); mais je pense que vous avez compris. Je ne poste pas cela pour critiquer mon collègue; Au contraire, je veux lui faire part des nombreux problèmes rencontrés dans le développement de classes comme celle-ci et le diriger dans la bonne direction. Personnellement, je pense que cette conception, bien que médiocre, est quelque chose qui est facilement "réparé".
Ma principale préoccupation est que si je veux le convaincre, il sera important pour moi d'avoir un argument qui est fort (bien soutenu), facile à comprendre, et concis (il ne va pas vouloir lire un courriel de 2 pages lui disant pourquoi je pense que son code doit changer).
Y a-t-il de bonnes ressources qui fournissent des arguments si bien conçus, abordant les inconvénients de ceci et peut-être d'autres anti-modèles mal conçus? Quelque chose comme un recueil des «erreurs courantes de conception de logiciels» serait extrêmement utile, s'il existe.
Remarque: Je me rends compte que tout simplement parler à ce sujet est la façon la plus directe et probablement perturber le moins possible de donner des conseils; Je pense simplement, ce serait bien d'avoir aussi cette ressource que je peux citer comme référence, encore une fois, si une telle ressource existe.
Wow. Ils le paient pour écrire des trucs comme ça? –