Wann erstellen Sie in .NET (Visual Studio) eine neue Assembly?

9

Ich arbeite an einer Silverlight-Anwendung. Ich habe es in mehrere Baugruppen aufgeteilt:

  • Domain
  • Repositorys (alles mit der Sterling-Datenbank)
  • Benutzeroberfläche
  • ...

So habe ich es gelernt, aber ich habe mich gefragt. Wenn Sie wissen, dass die DLLs nicht wiederverwendet werden, müssen Sie sie dann aufteilen? Oder könnten Sie alles in einer Assembly zusammenfassen und Ordner und Namespaces verwenden, um es aufgeräumt zu halten?

Ich habe auch Projekte gesehen, die zu viele Baugruppen haben. Anstatt Namespaces dort zu verwenden, wo es angemessen gewesen wäre.

Also: Wann erstellen Sie eine neue Assembly für einen neuen Code? Irgendwelche guten Ressourcen zu diesem Thema? Und teilen Sie den Code technisch (Domäne, Daten, Benutzeroberfläche usw.) und / oder funktional (dh Patientenverwaltung, Patientenmedizin, Krankenhauslogistik, ... - wahrscheinlich nur für größere Anwendungen auf Unternehmensebene) auf?

Peter
quelle

Antworten:

1

Ich empfehle, separate Assemblys für Klassen zu erstellen, die logischerweise in "Module" fallen. Dies ist nicht nur gut für die Wiederverwendung und Wartung, sondern auch eine Möglichkeit, die geringste Abhängigkeit zwischen Klassen zu erzwingen.

Die Mission wird darin bestehen, die Anzahl der Verweise auf andere Baugruppen, die jede Baugruppe benötigt, zu minimieren. Dies erfolgt hauptsächlich über Schnittstellen und Ereignisse. Wenn Sie Klassen in verschiedenen Assemblys haben, werden Abhängigkeiten sehr offensichtlich. Wenn Sie nur eine Assembly verwenden, ist es sehr einfach, das Nachdenken über Abhängigkeiten zu vernachlässigen, da auf alles zugegriffen werden kann.

Natürlich sollten Sie nicht übertreiben, sondern gegebenenfalls trennen. Stellen Sie sich das so vor: "Diese Klassen gehören zusammen und müssen nichts über diese Klassen wissen" und trennen Sie sich in diese Richtung

Homde
quelle
1
Hängt davon ab, was Sie unter "Modulen" verstehen, aber normalerweise teile ich verwandte Logik mithilfe von Namespaces anstelle von Assemblys. Denken Sie daran, dass Namespaces Assemblys umfassen können. Baugruppen sind die Bereitstellungseinheit. Daher sollten Sie in Betracht ziehen, Ihre Baugruppen entsprechend Ihrem Bereitstellungsszenario zu schneiden.
Ed James
3
Keine gute Idee. VS wird sehr träge, wenn eine Lösung mehr als ein paar Projekte enthält.
Nikie
4
Wenn Ihr VS zu träge wird, verwenden Sie entweder eine alte Version oder einen langsamen Computer. Ich habe riesige Projekte mit mehr als 30 Projekten, die in Sekunden kompiliert werden. Andererseits habe ich viele RAMs, Kerne und eine SSD :) Sie sollten natürlich nicht übertreiben, sondern nur gegebenenfalls trennen, denken Sie so darüber nach "Diese Klassen gehören zusammen und müssen nichts über diese Klassen wissen" und in diese Richtung trennen
Homde
Markierte dies als Antwort wegen der Bemerkung über Abhängigkeiten. Die Antwort von Ed James ist mindestens genauso wertvoll und richtig, aber diese Antwort trifft eher auf meine Situation zu.
Peter
2
Nach diesem Ansatz , den Sie mit einem Bündel von Baugruppen könnten am Ende: A, B, C, D, E, F, G, H, I, J, K. Wo auch immer Sie Assembly verweisen A, müssen Sie auch die abhängigen Assemblys verweisen: B, C, D. Aber Montage Cist abhängig von: E, F, G, Hso werden wir diese natürlich auch brauchen. Wenn Sie also eine Funktion benötigen, müssen ASie 7 zusätzliche Baugruppen herunterziehen, damit sie funktioniert. Stellen Sie sicher, dass Sie die richtigen Versionen jeder Baugruppe erhalten. Willkommen in der neuen DLL-Hölle.
Ed James
14

Eine Assembly ist die Bereitstellungseinheit für eine .NET-Anwendung. Daher sollten Sie in Betracht ziehen, den Schnitt Ihrer Assemblys mit Ihrer Bereitstellungsarchitektur abzugleichen.

Baugruppen sind auch nützlich, wenn Sie für einen Code eine separate Versionskontrolle benötigen. Wenn Sie beispielsweise gemeinsame Schnittstellen haben, die von einer unabhängigen Versionskontrolle profitieren würden, sollten Sie diesen Code in eine Assembly aufteilen.

Denken Sie daran, dass Namespaces Assemblys umfassen können. In vielen Fällen reicht es aus, das Verhalten mithilfe von Namespaces zu trennen. Schauen Sie sich das .NET an mscorlib.dll, das in einer einzelnen Assembly Code enthält, der eine Vielzahl von Verhaltensweisen abdeckt, die nur durch den Namespace getrennt sind.

Wenn Sie eine Autorität in diesem Bereich wünschen, suchen Sie nicht weiter als:

Richtlinien für das Framework-Design

Richtlinien für das Framework-Design: Konventionen, Redewendungen und Muster für wiederverwendbare .NET-Bibliotheken (2. Auflage) von Krzysztof Cwalina und Brad Abrams.

Ed James
quelle
Vielen Dank für die Buchreferenz in der Tat. Ich werde das überprüfen. Könnten Sie die Bereitstellungsarchitektur näher erläutern? Wie würde sich die Bereitstellung von 10 DLL-Dateien von der Bereitstellung von 1 unterscheiden? Es sei denn, Sie können eine von zehn Dateien aktualisieren, während die anderen unberührt bleiben?
Peter
1
@Peter: Wenn Sie 10 Assemblys codiert haben, die immer zusammen bereitgestellt werden, können Sie die Versionskontrolle und -bereitstellung vereinfachen, indem Sie den gesamten Code in einer einzigen Assembly zusammenfassen. Wenn die 10 Baugruppen nicht immer zusammen bereitgestellt werden, kann es hilfreich sein, separate Baugruppen zu haben.
Ed James