2009-03-30 5 views
7

私の会社で議論が行われています。一部の企業は、移動するビジネス、データ、ビジネスエンティティを1つのアセンブリで提唱しています。アプリケーション層を別のアセンブリに分割する

  • 検出可能性の目的。あなたが探しているものを簡単に見つけることができます。
  • は、我々は別のアセンブリ内の各レイヤとビジネスエンティティをしたい開発のためのプロジェクトにアプリケーションアーキテクチャガイドを引用

その他を追加する必要がありdllファイルの数を減らします。

  • 当社の事業およびデータ層は、COM +コンポーネントで構成され、両方のことに注意してください。
  • 私たちの現在のハードウェアアーキテクチャは、同じボックスにウェブ、ビジネス、データを持っています。
  • 別のボックスにSQL。
  • 現在、com +といってもほとんど役に立たないため、dllのバージョン管理は使用していません。

使用の中には、私たちのビジネス、データ、エンティティを分割する必要があると感じているものの、理由が不足しています。

  • 潜在的にのみWebプロジェクトに追加し、ビジネス層アセンブリを有することにより、適切なアーキテクチャを奨励
  • メモリ消費量を削減します。データサービスも利用可能であれば、間違ったやり方を簡単に行うことができます
  • Webサーバーをビジネスレイヤーとデータレイヤーから分割すると、神のアセンブリから不要なものをインストールする必要はありません。

現在、私たちのシステムには約600のdllがあります。だから私たちはすべてが分裂している極端なところにいます。間違いなく統合がいくつかありますが、提案されているのは、すべてのアプリケーションが1つのdllに収められている完全な他の極端な状況です。

私はこの共通の問題についていくつかの外見を得ることができますか?

ありがとうございます!

答えて

4

DLLまたはアセンブリは、配布単位です。

  1. 特定の名前空間またはクラスのコードが他の名前空間またはクラスと密接に結合している場合は、同じ配布単位にする必要があります。 foo。*ファイル内のコードがバー。*ファイル内のコードを必要とせずに決して使用されない場合、それらを同じディストリビューションユニットに組み込むこともできます。
  2. 名前空間またはクラスのグループが再利用可能なコンポーネントを表す場合(つまり、そのコードが2つ以上の製品/アプリケーションで使用されている場合)、個別にバージョン管理され、独自の配布単位になることをお勧めします。

私にとっては、主に凝集力、カップリング、および再使用についてです。
私は分散の特定のユニットのクラスが好きです。私は分散のユニット間の結合を嫌います(ほとんどの場合、結合が依存関係によって実現されるようなインターフェースを含む3番目の配布ユニットへの依存が好まれます)コンクリートではなく抽象的に)。再利用は、私が配布単位を決定する際の鍵です。コードが複数のアプリケーション/製品で使用される場合は、アプリケーションバージョン番号とは別の独自のバージョン番号を持つ別個の配布単位である必要があります。

1

私たちのチームの目標はできるだけ少ないアセンブリを持つことです。あなたがリストした利点に加えて、私は、DLLの数が少ない場合、DLLのバージョン管理の悪夢を扱いやすいことも発見しました。過剰な数のアセンブリを使用すると、アセンブリ間で循環参照を作成するリスクも生じます。

私たちは、それが属していないアセンブリにコードを書き込むことはありません。ただし、そのための確固たる理由なしに新しいアセンブリを作成するのは間違いありません。通常、アプリケーションの共有ロジック(ビジネスオブジェクトなど)用のアセンブリと、ユーザーインターフェイス用のアセンブリ(Webアセンブリ、WinFormsアセンブリなど)があります。新しいアセンブリの作成を避けるために、アセンブリ間でコード/クラスを複製することもありません。

2

物理的な配備の境界を分割することをお勧めします。リモート使用のためにホストできるコンポーネントがある場合は、別のアセンブリが意味を持ちます。それはおそらく、あなたが分割できる最も簡単で最も実績のある線です。 の場合、ビジネス層とデータアクセスコードの両方を含めるWeb層にが必要な場合はほとんどありません。

そこから、独立してバージョンに合ったものにアセンブリを縮小しようとします。 10個以上のアセンブリを常にコピーする必要がある場合は、おそらく1つのアセンブリとして構築する必要があります。

関連する問題