Existe-t-il des directives pour décider quand une classe doit se trouver dans son propre assembly / DLL? Je vois souvent deux écoles de pensée:
1) Chaque "regroupement" de classes appartient à sa propre DLL, par exemple les référentiels, les services, les DTO, l'infrastructure, etc.
2) Tout doit être dans une seule DLL mais séparé via des espaces de noms / dossiers, par exemple avoir une DLL "Core" avec des espaces de noms supplémentaires, par exemple Core.Repositories, Core.Services, Core.DTO, etc.
Au travail, nous regroupons tout dans une seule assemblée appelée «Business». Il y a des dossiers mais il n'y a pas de véritable séparation - les objets métier (avec logique, dont certains ne devraient même pas être des classes) sont regroupés dans un dossier "BusinessObjects" sans précaution. Les éléments utilisés dans plusieurs classes se trouvent dans un dossier "Core". Les utilitaires sont dans un dossier "Utilitaires", l'infrastructure d'accès aux données est un dossier "Données" - vous avez l'idée.
Pour un nouveau module sur lequel je travaille, je veux / j'ai besoin d'avoir une couche d'accès aux données séparée (pensez à une implémentation rudimentaire du référentiel) mais je ne veux pas simplement le jeter sous le dossier "BusinessObjects" avec les 160 autres (!) classes là-bas. En même temps, je suis préoccupé par la création d'une nouvelle bibliothèque de classes car tout le monde a l'habitude de bourrer une classe dans la bibliothèque unique; un dossier / espace de noms pourrait cependant fonctionner.
la source
"Oncle Bob" Martin de Clean Code, la renommée de SOLID Principles a décrit trois principes ici :
La règle générale est que vous devez limiter le plus possible le nombre de projets dans votre solution. Ne les divisez que si vous en avez besoin pour implémenter une ou plusieurs user stories spécifiques, ou si le fait d'avoir un seul assembly cause des problèmes de performances mesurables (généralement une fois qu'ils atteignent plusieurs mégaoctets).
la source
Quelques autres principes directeurs avec lesquels je travaille:
Pensez-vous que vous réutiliserez ce code dans d'autres projets? Pour un groupe d'applications Web connexes, nous avions un module lié au compte d'utilisateur que toutes les applications utilisaient, car ils utilisaient tous le même modèle pour les comptes d'utilisateur et les connexions. J'ai fait des choses similaires avec des bibliothèques de géométrie et de mathématiques et je les ai réutilisées dans plusieurs applications, simplement en incluant la DLL.
Voulez-vous pouvoir modifier / déployer ce code sans redéployer / recompiler tout le projet? Parfois, il a été utile de simplement reconstruire le module, déployer et redémarrer l'application Web.
Il semble que dans votre cas, un référentiel de base et générique pourrait être utile à nouveau à l'avenir, il pourrait être utile de le séparer dans une nouvelle DLL si vous le pouvez.
la source