0

ここに画像の説明を入力

こんにちは、みんな

現在、次の参照構造があります。

DSFinalProject には、"DAL"プロジェクトと"DataStructure"プロジェクトの参照があります。

DataStructureプロジェクトの参照DALもあります…</p>

ここで、レイヤーDSFinalProjectへの参照はありませんがDAL、そのクラスのインターフェイスを使用できるようにしたいと考えています。

"tunnel"実際にそれらの間で参照を作成せずに、DAL プロジェクトにある DSFinalProjectへのインターフェイスへの方法はありますか?

おそらくDataStructureプロジェクトを使用していますか?それとも何か?

助けてくれてありがとう:)

4

3 に答える 3

1

最も簡単な方法は、それらを に配置することですDataStructure。これは、インターフェイスを参照するものもすべて参照する必要があるため、それほど悪くはありませんDataStructure

私の投票は、インターフェイスを別のアセンブリに含める必要があるシナリオに遭遇するまで、それらをそこに置くことです。

于 2012-09-21T13:09:58.640 に答える
1

プロジェクト (またはアセンブリ) への参照がなくても、DSFinalProject から DAL プロジェクト内のインターフェイス (またはその他) を参照する方法がわかりません。

依存関係がよりクリーンになると思われる場合は、それらを別のプロジェクトに移動できます-インターフェイスをDataStructureプロジェクトに配置すると、DALが必要でDALが必要とする循環参照に遭遇します。

于 2012-09-21T13:05:23.730 に答える
1

とにかくあなたが尋ねるものがあるとは思いません。オブジェクトをシリアル化するとどうなるかを考えると、データ ストリーム内でフィールドがどのように配置されるかという下位レベルの構造を提供するアセンブリが必要です。最初の 4 バイトが double などであることを示すには、インターフェイスのコードが必要です。

したがって、これを行う唯一の方法は、インターフェイスをすべてから参照できる新しい interfaces.dll に移動することです。このパターンは、EnterpriseLibrary を含む多くの例で繰り返されます。

しかし... あなたは古典的な間違いを犯しています。コードを非常に多くのプロジェクトに分割するのはなぜですか? プロジェクトは、時間の分離メカニズムを設計するのではなく、コードを実行時にパッケージ化するものと考える必要があります。非常に多くのアセンブリに分割することで、3 つのことを行います。

  1. コンパイラが他のアセンブリをフェッチする作業が増えるため、ビルド システムの速度が低下します。
  2. すべてのプロジェクトをロードしてプロジェクト間の参照を保持するのが難しくなるため、Visual Studio の速度が低下します。私はかつて、開くのに 15 分かかった 140 個のプロジェクトを含むソリューションに取り組んだことがあります (ただし、私はいつも朝のコーヒーを飲みました)。
  3. DotNet が別の 4k dll を検索する必要があるため、実行時のパフォーマンスが低下します (1 行のコードであっても、これは最小限です)。Fusion のログを確認するか、SysMon を使用して、この単純な操作にどれだけの作業が必要かを確認してください。

コードを最適化する方法に関するこの例のヒントを見てください。ソリューションがより複雑になるにつれて何が起こるかがわかります。

このように分割する代わりに、代わりに名前空間を使用します。分離は引き続き行われますが、非常に多くの参照を使用する代わりに、クラス内の using ステートメントによって制御できます。DSFinalProject 層にあるように設計されたクラスで DAL 参照を使用しているかどうかは簡単にわかります。プロジェクトの下にフォルダーを作成し、代わりにそこにクラスを追加するだけです。すべてのプロジェクトを取り除き、適切に階層化されたシステムを維持します。

ソリューションが拡大するにつれて、プロジェクトの導入を開始する前に少なくとも 2 つの実行可能ファイルが作成されるまで待ってから、実行時の影響を検討してください。常に 2 つのアセンブリをロードする場合は、それらを 1 つにマージします (最近、ilmerge を使用してサード パーティのライブラリでもマージするオープン ソース プロジェクトをいくつか見てきました)。

于 2012-09-21T13:34:24.997 に答える