2009-04-30 5 views
0

Si j'ai deux assemblys, l'un contenant uniquement des règles métier (assembly A) et l'autre servant d'interface aux dépendances externes telles que le système de fichiers, les DB, les services Web, etc. (ensemble B), devrait-on référencer B ou devrait-on référencer A?Tous les assemblys internes par rapport aux assemblages qui ont des dépendances externes

Par exemple:

Si j'ai une classe SourceCodeInterpreter (ensemble A), doit-il instancier un SourceCodeFileReader (dans l'assemblage B) pour lire les données, ou si le SourceCodeFileReader instancier une classe SourceCodeInterpreter après avoir lu la source fichier, puis démarrez l'interpréteur?

Répondre

1

Tout dépend de la façon dont les choses vont être utilisées. Si un assembly utilise un type défini dans un autre assembly, il aura besoin d'une référence à celui-ci. J'essaie d'éviter d'ajouter des dépendances entre les assemblées à moins qu'elles aient vraiment une raison d'exister.

Dans votre exemple, j'essayerais de séparer les deux assemblages. Ces deux assemblages sont très probablement utilisés par votre application. Votre application peut faire référence à la fois, et ils peuvent être indépendants. L'application utilise SourceCodeFileReader pour lire votre code, puis le transmet à votre SourceCodeInterpreter pour l'interpréter.

Si, toutefois, vous essayez de faire en sorte qu'un seul type soit utilisé, je placerais l'assembly "top level" comme celui contenant une référence aux "détails de niveau inférieur". Dans ce cas, cela signifierait probablement que l'interprète fasse référence au lecteur - puisque le lecteur est de niveau inférieur et inutile en soi.

+0

J'aime celui-ci. J'avais dans ma tête que pour garder l'application principale aussi simple et aussi bête que possible, il fallait invoquer une seule méthode sur une seule classe, mais il n'y a pas grand-chose de plus à utiliser deux classes/assemblages. Une bien meilleure séparation des préoccupations de cette façon. Merci! –

Questions connexes