4

私は、ドメインロジックと永続性ロジックの懸念を分離するための最善の方法を模索しています。データアクセスにLinq-2-Sqlを使用しており、NerdDinnerチュートリアルに従っています。40ページを見ると、Linqで生成されたクラスのビジネスルールに部分クラスを使用していることがわかります。私にとって、それは間違っていると感じます(そうですか?)。アプリケーションのプレゼンテーション層に公開される独自のPOCOが必要です。ここでの1つのオプションは、個別のDTOクラスを使用することです。それは私には気分が良くなりますが、テストと保守のためにさらに多くのコードが追加されます。

部分的なクラスを追加してLinqクラスにビジネスルールを適用するという単純さは好きですが、データベースが変更された場合はプレゼンテーション層も更新する必要があるため、Linqクラスをプレゼンテーション層に公開するのは好きではありません。

データベースが変更された場合にプレゼンテーション層を更新する必要がないため、DTOアプローチはよりクリーンに感じられますが、処理するコードははるかに多くなります。

したがって、私の現在のアプローチは、2つのクラスライブラリです。1つはLinq-2-Sql DBML +部分クラスを持ち、もう1つは自動生成されたプロパティしか持たないクラスのセットを持ち、次に「リポジトリ」クラスからデータを取得することを管理します。 Linqアセンブリと変換IQueryable<T>.

もっと良い方法はありますか?より良い中間点はありますか?両方の長所を活かすことができますか?もしそうなら、どのようにそれらを異なるアセンブリに分離しますか?

アップデート

たぶん、私が本当にする必要があるのは、すべてのPersitence / Domainロジックを単一のアセンブリに統合し(NerdDinnerサンプルで使用されているのと同じアプローチ)、プレゼンテーション層に異なる「ビューオブジェクト」を作成することです。私のLinq-2-Sqlエンティティ?

4

2 に答える 2

3

私は、使用しているテクノロジーが許す限り、ドメインオブジェクトを永続性を無視するようにしています。LINQ to SQLについては、 Ian Cooperが設定したアプローチに従いました(LINQ to SQLを無視する、 LINQ to SQLアプリケーションの設計、パート5およびLINQ to SQLアプリケーションの設計、パート6を参照)。基本的に、ドメインオブジェクトを手動でコーディングし、それらをLINQ to SQLにワイヤリングしsqlmetalて、データベースへのマッピングを生成し、必要に応じて手動で編集することができます。それは私にとって非常にうまくいきました。

Jeremy Millerは、MSDNマガジンに永続性の無知のトピックに関する優れた記事を掲載しています。作業単位のパターンと永続性の無視を参照してください。

したがって、私の現在のアプローチは、2つのクラスライブラリです。1つはLinq-2-Sql DBML +部分クラスを持ち、もう1つは自動生成されたプロパティしか持たないクラスのセットを持ち、次に「リポジトリ」クラスからデータを取得することを管理します。 Linqアセンブリとそれをに変換しIQueryable<T>ます。

私はこのアプローチが好きではありません。DRYに激しく違反します。

于 2010-01-18T16:27:43.533 に答える
0

AutoMapperを見たことがありますか?ブログを見ると、あなたが説明している状況がわかります。

于 2010-01-18T16:32:48.530 に答える