5

エンティティ フレームワークをデータ アクセス レイヤーとして使用する MVC3 Web アプリケーションでドメイン レイヤーとデータ レイヤーを分離することに関して、いくつか質問があります。

現時点では、私のコントローラーは EF クラスに完全に依存しており、ほとんどの時間を依存性注入について読んだ後、それらを分離しようとしています。

最初の質問は、すべての EF クラスをビジネス レイヤーに効果的に複製する必要があるかどうかです。私は明らかにEFクラスをもう使用できないので、これを機能させるには、使用中のすべてのテーブルクラスの複製を作成する必要があるようです。これは正しいですか?たとえば、DB に 50 個のテーブルを表す 50 個の EF クラスがある場合、ビジネス レイヤーに 50 個の新しいクラスを作成する必要がありますか? -> そして、それらを無期限に維持しますか? これは大変な作業のように聞こえます。

第二に、依存関係が逆転し、ビジネス層がデータ層に依存する代わりに、データ層がビジネス層に依存するようになると仮定するのは正しいですか?

4

2 に答える 2

3

エンティティの複製については...EFのバージョンと使用するアプローチによって異なります。

POCOエンティティを使用する場合、エンティティはから継承しないため、モデルはEFに関連していませんEntityObject。したがって、エンティティを複製する必要はありません。実行時に、プロキシエンティティのおかげで、EFはPOCOから継承する動的タイプを生成し、遅延読み込みのためにすべてのEF配管を追加します...など。

いずれにせよ、ASP.Net MVCのおかげで、常にいくつかのモデルクラスをビューモデルと呼ばれるものに複製することになり、ビューを強く入力できることに注意してください。

第二に、依存関係が反転し、ビジネスレイヤーがデータレイヤーに依存する代わりに、データレイヤーがビジネスレイヤーに依存するようになると仮定するのは正しいですか?

いいえ、データレイヤーはビジネスレイヤーを認識してはなりません。

于 2013-03-20T09:32:26.093 に答える
1

モデルクラスをコンテキストとは別のアセンブリに配置できます。

これを行うと、データレイヤー、ビジネスレイヤー、およびWebサイトはすべてモデルアセンブリを参照できますが、他の依存関係を分離できます。たとえば、Webサイトアセンブリはデータレイヤーを直接参照しません。つまり、そうではありません。 EFも参照する必要があります。

最初にコードを使用している場合、これは簡単です。

最初にデータベースを使用している場合は、モデル.ttファイルへの参照をコンテキストアセンブリから削除します。削除したり移動したりせずに、新しいモデルアセンブリにリンクを追加してください。

リンクを追加するには、ソリューションエクスプローラーでプロジェクトを右クリックし、[追加]->[既存のアイテム]を選択します。次に、ファイルチューザーダイアログが表示されます。そのダイアログの[追加]ボタンには、[リンクとして追加]を選択できるドロップダウンがあります。

于 2013-03-20T09:44:09.873 に答える