Question

Ma question ne concerne pas tant l'utilisation des interfaces que celle d'une organisation de projet.

Remarque: j'utilise VisualStudio dans une application multicouche.

Mes fichiers d'interface doivent-ils faire partie d'un projet distinct de leurs implémentations? Mon idée initiale est qu'il serait utile de séparer toutes mes interfaces de service dans leur propre projet (et un projet pour mon environnement initial). mises en œuvre) afin que, ultérieurement, le projet / projet concret puisse être retiré et remplacé si nécessaire par un nouveau.

Pour préciser avec un exemple: supposons que j’ai une interface de couche de gestion appelée IBusinessService qui réside dans l’espace de noms MyApp.Business.Services. Mon implémentation FooBusinessService existerait dans le même espace de nom, mais dans un projet différent dans VisualStudio. Si, par la suite, l’implémentation devait être retravaillée, un développeur pourrait supprimer la référence à FooService.proj et la remplacer par une référence à BarService.proj.

Cela donne l'impression de désencombrer la solution de l'application en vous permettant de référencer un projet avec uniquement des interfaces sans acquérir également des implémentations concrètes (qui peuvent être obsolètes ou ne vous être d'aucune utilité), mais il me manque quelque chose?

Était-ce utile?

La solution

Je suis avec toi. Je préfère placer mes interfaces dans un projet séparé ET dans un espace de noms différent. L'exemple classique concerne les classes d'accès aux données. Vous voulez pouvoir coder une version MSSQL et une version MySQL, toutes deux implémentant la même interface. En tant que tel, je préfère que la définition de l'interface soit dans un assemblage / projet séparé. Voici un exemple de disposition des assemblys et des espaces de noms:

  • Elder.DataAccess.Core - contient les interfaces et les utilitaires communs
  • Elder.DataAccess.MSSQL - Implémentations MSSQL spécifiques des interfaces
  • Elder.DataAccess.MySQL - Implémentations MySQL spécifiques des interfaces

Cela me permet de modifier les implémentations sans toucher au projet contenant les définitions d'interface. Cela m'aide aussi avec le contrôle de version et le suivi des modifications. Il y a peut-être d'autres façons de peauner ce chat, alors je serai impatient de voir les réponses des autres personnes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top