2012-03-29 6 views
3

Was sind die 'besten' Praktiken in Bezug auf zirkuläre Abhängigkeiten zwischen DLLs in. NET?Circular Dependencies unter DLL's

Ich versuche, an einer DLL für die Fehlerbehandlung/Protokollierung zu arbeiten, die XML lesen/schreiben muss.

Ich habe bereits mehrere Klassen, um XML-Manipulation in einer separaten 'Dienstprogramm' DLL zu helfen.

Es wäre schön, meine ausgefallenen Fehlerbehandlungsklassen in die Dienstprogramm-DLL zu integrieren, aber ich benötige auch den XML-Manipulationscode für die Fehlerprotokollierungs-DLL.

Ich dachte, ich sollte die DLL für die Wiederverwendung in anderen Projekten getrennt halten, aber jetzt bin ich mir nicht sicher, was der beste Ansatz wäre.

Haben Sie Vorschläge zum Umgang mit diesem Szenario?

+1

möglich Duplikat [Rundreferenz Problem (C#)] (http: // Stackoverflow. com/questions/1318123/circular-referenz-problem-c) – RQDQ

+1

xml-handling mit XDocument (linq2xml) ist wirklich einfach Ich glaube nicht, dass Sie dafür ein separates Projekt benötigen. –

+1

Was bedeutet es, sie voneinander zu trennen, wenn sie voneinander abhängen? – McGarnagle

Antwort

8

Eine Möglichkeit, es zu übergeben, besteht darin, ein Teil in die Baugruppe des anderen Teils zu verschmelzen. Meine Erfahrung ist, dass Leute ihr Projekt in viele kleine Assemblies zerlegen, was nichts wirklich verbessert, sondern Abhängigkeitsprobleme verursacht.

Ich befürworte im Allgemeinen sehr wenige große Baugruppen. Verwenden Sie Assemblys als eine Bereitstellungseinheit, um Ihren Code nicht zu strukturieren. Strukturieren Sie Ihren Code mit Namespaces.

Eine andere Möglichkeit, dies zu beheben, ist die Einführung von Schnittstellen, entweder in einer gemeinsamen Baugruppe oder in einer der beiden vorhandenen Baugruppen. Letzteres ist sinnvoll, wenn die Interface-Methoden selbst keine zirkuläre Abhängigkeit haben, sondern die Methodenkörper.

+2

Danke - Ich begann zu denken, dass ich Dinge kaputt machte in zu viele Stücke. Ich denke, ich werde mit einer einzigen größeren Versammlung gehen, aber die verschiedenen Sorgen mit Namespaces trennen. Vielen Dank! – ChandlerPelhams

6

Hier sind zwei White-Books zum Thema Partitionierungs-Code in .NET-Assemblys und Namespaces, die die Warum und wie von kreisförmigen Abhängigkeiten abdecken. Es geht in die gleiche Richtung wie usr schlägt vor: sehr wenige große Baugruppen, verwenden Sie Baugruppen als eine Einheit der Bereitstellung, nicht um Ihren Code zu strukturieren. Strukturieren Sie Ihren Code mit Namespaces.

Partitioning code base through .NET assemblies and Visual Studio projects (8 Seiten)

  • Gemeinsame gültige und ungültige Gründe eine Baugruppe
  • Erhöhung Visual Studio Lösung Kompilation Leistung zu schaffen (schneller x10)
  • Organisieren Sie die Entwicklungsumgebung

Defining .NET Components with Namespaces (7 Seiten)

  • definieren Komponenten in .NET-Assemblies
  • azyklischer Graph von Abhängigkeiten zwischen den Komponenten
  • evolutionäres Design und azyklische Komponentisierung
+0

Danke für all die tollen Infos, beide Papiere sind eine tolle Lektüre! – ChandlerPelhams