Supposons que nous ayons une classe qui sera largement utilisée dans tout le code (C#), par exemple une classe Log. Dites que le journal écrit des entrées dans des fichiers XML dans un répertoire spécifique. Maintenant, une tentative pour forcer l'utilisateur à initialiser la classe avec les informations requises serait de rendre privé le constructeur par défaut (sans paramètre) et d'en fournir un qui prend un paramètre logdirectory. L'inconvénient est que, chaque fois que quelque chose doit être écrit dans le journal et qu'une instance de la classe Log est créée, le paramètre doit être fourni.Question de conception: Comment gérer l'initialisation?
Quelles sont les autres options disponibles? Merci d'avance pour vos réponses.
+1 d'accord sur la plupart de celui-ci. @Jon je ne dirais pas DI n'est pas pratique. Avec un bon cadre DI, il n'y a pas grand-chose à faire, et vous obtenez beaucoup de flexibilité. Que voulez-vous dire par là? – eglasius
Je veux dire qu'avoir un champ "logger" dans chaque classe qui pourrait se connecter, et nécessitant un constructeur prenant un logger partout, peut agir comme un "fluff" supplémentaire quand en production vous utiliserez seulement un singleton. C'est agréable et flexible, certes, mais il y a un certain coût pour cette flexibilité. –
Je vois, je suis d'accord. Vous pouvez également utiliser l'injection de propriété controversée pour l'enregistreur :) – eglasius