Unser aktuelles Projekt ist in ein zirkuläres Abhängigkeitsproblem geraten. Unsere Geschäftslogik-Assembly verwendet Klassen und statische Methoden aus unserer SharedLibrary-Assembly. Die SharedLibrary enthält eine ganze Reihe von Hilfsfunktionen, z. B. eine SQL Reader-Klasse, Enumeratoren, globale Variablen, Fehlerbehandlung, Protokollierung und Validierung.Circular Dependency Solution
Die SharedLibrary benötigt Zugriff auf die Business-Objekte, die Business-Objekte benötigen jedoch Zugriff auf SharedLibrary. Die alten Entwickler lösten diesen offensichtlichen Codegeruch, indem sie die Funktionalität der Geschäftsobjekte in der gemeinsam genutzten Bibliothek replizierten (sehr anti-DRY). Ich habe einen Tag damit verbracht, über meine Optionen zu lesen, um das Problem zu lösen, aber ich bin am Ende.
Ich bin offen für die Idee der Architektur Redesign, aber nur als letztes Mittel. Wie kann ich eine Shared-Helper-Bibliothek haben, die auf die Business-Objekte zugreifen kann, während die Business-Objekte weiterhin auf die Shared-Helper-Bibliothek zugreifen?
Die offensichtliche Frage ist: Warum benötigt die gemeinsame Bibliothek Zugriff auf die Business Objects? Wenn Sie das beantworten können, haben Sie eine Lösung. – Aaronaught
Die SharedLibrary enthält eine abstrakte globale Variablenklasse mit statischen Eigenschaften. Diese Eigenschaften werden von Werten aus der Datenbank erzeugt, daher die Notwendigkeit von Geschäftsobjekten, dies ist nur ein Beispiel von vielen. Und natürlich benötigen die Business-Objekte Zugriff auf diese Konstanten. – gfoley
Deshalb verwende ich niemals vage Begriffe wie "shared", um eine Bibliothek zu beschreiben. Was macht es eigentlich? Was Sie eine gemeinsame Bibliothek nennen, hat eindeutig viel zu viele Verantwortlichkeiten, und vielleicht auch die Business-Objekt-Bibliothek. In der Regel werden diese Lösungen gelöst, indem die wirklich unabhängigen Klassen/Schnittstellen in ihre eigene Bibliothek gestellt werden. – Aaronaught