Dépendance Circulaire

[Résolu]
Signaler
Messages postés
24
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 février 2009
-
Messages postés
24
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 février 2009
-
Bonjour, je débute en C# et je me retrouve face à un problème.

Je m'essaie au développement en couche, je dispose d'une classe library qui contient tout ce qui est GUI et une autre class library ou je compte mettre tout ce qui est connexion à une DB.
A partir de ma class library DB, je dois pouvoir accéder à des objets de l'autre class library.
J'ajoute donc une référence vers la seconde et tout se passe bien. J'arrive à accéder à ces objets.
Cependant, le problème vient lorsque, à partir de ma library réservée au GUI, je veux appeler une fonction qui se trouve dans l'autre library (faire le contraire, donc), j'essaie d'ajouter une référence à celle-ci et je tombe sur le message suivant :
"a reference to ... could not be added. Adding this project as a reference would cause a circular dependency"
Je pense comprendre le message d'erreur, mais alors ... comment faire pour accéder à mes méthodes à partir de mon GUI ?

Merci d'avance.

2 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
49
Salut.

Juste un petit rappel : le développement en couches implique que les couches soit indépendantes dans un sens. Pour un modèle MVC, la vue connaît le contrôleur, qui connait le modèle, mais le modèle ne connait rien. Si tu devais faire une référence vers ton contrôleur dans ta vue, tu perdrais tout l'intérêt des couches, puisque tu ne pourrais pas les compiler indépendamment.

Il faut bien sûr pouvoir transmettre des paramètres à ton modèle (class library DB), et pour cela : soit tu utilises les types directement existants en C#, soit tu crées encore une autre class library, référencée à la fois par ton contrôleur et ton modèle, dans laquelle tu crées une classe qui te servira d'objet à transmettre, mais jamais le modèle n'est censé faire d'appel au contrôleur.

Pour conclure, je dirais que même le contrôleur n'est pas censé référencer ton modèle, mais là encore, une class library qui contient une interface décrivant ton modèle, et tu instancie ton modèle via une class factory. Ca parrait peut-être un peu compliqué au premier abord, mais si tu recherches sur internet, tu trouveras certainement plus d'infos.

Krimog :
while (!succeed = try()) ;
Messages postés
24
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 février 2009
1
Je te remercie d'avoir pris le temps de répondre à ma question, assez rapidement - qui plus est - et pour tes explications.
Je vais me pencher un peu là-dessus :-)
Bonne journée