2009-03-30 12 views
7

In meiner Firma wird diskutiert. Einige befürworten das Verschieben von Geschäfts-, Daten- und Geschäftseinheiten in einer Baugruppe fürAnwendungsschichten in verschiedene Baugruppen aufteilen

  • Zwecke der Auffindbarkeit. machen Sie es leicht zu finden, was Sie suchen.
  • Reduzieren Sie die Anzahl der DLL wir
  • Andere unter Berufung auf die Anwendungsarchitekturführer wollen jede Schicht und Geschäftseinheiten in einer separaten Assembly an einem Projekt zur Entwicklung hinzufügen müssen.

    Bitte beachten Sie, dass

    • Unsere Geschäfts- und Datenschichten von com + Komponenten bestehen beide.
    • Unsere aktuelle Hardware-Architektur hat Web-, Business- und Daten auf derselben Box.
    • SQL auf einer anderen Box.
    • Wir verwenden derzeit keine Dll-Versionierung, weil sie bei com + sowieso meistens nutzlos ist.
    • Einige der Verwendung haben ein Bauchgefühl, dass wir unser Geschäft, Daten und Entitäten teilen sollten, aber sind kurz auf Gründe.

      • Potenziell Speicherverbrauch
      • Ermutigen richtige Architektur reduzieren, indem sie nur für Web-Projekte Business-Schicht-Baugruppen hinzugefügt haben. Wenn die Datendienste ebenfalls verfügbar sind, ist es einfach, die Dinge falsch zu machen.
      • Wenn wir unseren Webserver von den Geschäfts- und Datenschichten trennen, müssen wir keinen Mist installieren, den wir nicht von einer Gott-Versammlung brauchen .

      Im Moment haben wir etwa 600 DLLs in unserem System. Wir sind also am einen Extrem, wo alles aufgeteilt ist. Es gibt definitiv eine Konsolidierung, die passieren kann, aber was vorgeschlagen wird, bringt uns zu einem völlig anderen Extrem, bei dem jede Anwendung in einer DLL ist.

      Könnte ich eine äußere Sicht auf dieses häufige Problem bekommen?

      Danke!

    Antwort

    4

    DLLs oder Baugruppen sind Einheiten der Verteilung.

    1. Wenn der Code in einem bestimmten Namespace oder einer Klasse so eng mit einem anderen Namespace oder einer anderen Klasse verbunden ist, sollte er sich in der gleichen Verteilungseinheit befinden. Wenn der Code in der Datei foo. * Niemals verwendet wird, ohne den Code in der Datei bar. * Zu benötigen, können Sie ihn auch in der gleichen Verteilungseinheit erstellen.
    2. Wenn ein Namespace oder eine Gruppe von Klassen eine wiederverwendbare Komponente darstellt (d. H. Dieser Code wird in zwei oder mehr Produkten/Anwendungen verwendet), ist es ein guter Kandidat, separat versioniert zu werden und seine eigene Verteilungseinheit zu sein.

    Für mich geht es in erster Linie um Kohäsion, Kopplung und Wiederverwendung.
    Ich mag die Klassen in einer bestimmten Einheit der Verteilung, um zusammenhängend zu sein, ich mag keine Kopplung zwischen Einheiten der Verteilung (ich würde fast immer bevorzugen Abhängigkeiten von einer dritten Einheit der Verteilung, die Schnittstellen enthält, so dass die Kopplung durch Abhängigkeiten realisiert wird eher auf Abstraktionen als auf Konkretionen). Die Wiederverwendung ist der Schlüssel für mich, wenn ich Entscheidungen über Vertriebseinheiten treffe. Wenn der Code in mehreren Anwendungen/Produkten verwendet wird, muss er eine separate Verteilungseinheit mit einer eigenen Versionsnummer sein, die von der Anwendungsversionsnummer getrennt ist.

    1

    Unser Ziel ist es, so wenig Baugruppen wie möglich zu haben. Zusätzlich zu den Vorteilen, die Sie aufgelistet haben, habe ich auch festgestellt, dass es einfacher ist, mit DLL-Versionierungs-Albträumen umzugehen, wenn es eine kleinere Anzahl von DLLs gibt. Die Verwendung einer übermäßigen Anzahl von Assemblies birgt auch das Risiko, zirkuläre Referenzen zwischen Assemblys zu erzeugen.

    Wir gehen nicht aus dem Weg, um Code in eine Baugruppe zu schieben, in die er nicht gehört. Aber wir schaffen definitiv keine neue Baugruppe ohne einen guten Grund dafür. In der Regel haben wir eine Assembly für die gemeinsame Logik der Anwendung (Geschäftsobjekte usw.) und eine Assembly für die Benutzerschnittstelle (die Web-Assembly, die WinForms-Assembly usw.). Wir duplizieren auch nicht den Code/die Klassen unter den Assemblys, nur um zu vermeiden, dass eine neue Assembly erstellt wird.

    2

    Die Aufteilung auf die physischen Deployment-Grenzen ist eine gute Idee. Wenn Sie Komponenten haben, die für die Remote-Nutzung gehostet werden können, ist eine separate Assembly sinnvoll. Das ist wahrscheinlich die einfachste und solideste Linie, auf die man sich aufteilen kann, für den Anfang. Es gibt wenige Fälle, in denen Sie die Webebene möchten, um beispielsweise die Geschäftsdienste und den Datenzugriffscode einzubeziehen.

    Von dort versuchen Sie, die Baugruppen auf Dinge zu reduzieren, die für die Version unabhängig voneinander sinnvoll sind. Wenn Sie immer mehr als 10 Assemblys zusammen kopieren müssen, dann sollten sie wahrscheinlich als eins gebaut werden.