2011-01-21 14 views
3

私は最初のデータベースプログラムをSql Expressで作っています。現在私はLinq-to-SQLをデータアクセスに使用しています。リポジトリクラスは「エンティティ」タイプのオブジェクトを返します。意味;ビジネスオブジェクトクラスとして使用するdbmlエンティティクラスを拡張します。今私はこれをもっと分離したいと思っています。 POCOビジネスオブジェクトを持ちます。リポジトリ; POCO/Linq-to-Sqlエンティティクラス間のマッピング

ここで私は、さまざまなソリューションが存在する可能性があるのは不思議です。私は、リポジトリ内のproperty-by-property、各エンティティクラスをドメインクラスに手動でマッピングする必要があるように思えます。私はこれまで数百の列を持つ約20のテーブルを持っています。さて、私はこれがあなたがまだ使用している一般的な/典型的なアプローチであるかどうかを確認したいだけです。過度の複雑さを導入しない選択肢がある場合、それは何でしょうか?手動でマッピングを作成する前に

答えて

0

AutoMapperは、クラス間変換を実行するのに適したツールです。しかし、私はLinq2SqlとAutoMapperを組み合わせたDALを考えています。なぜFluent NHibernateと一緒に行くのではないのでしょうか?セットアップは非常に簡単で、SqlExpressを含むほぼすべてのデータベース上で動作し、Linqプロバイダがシームレスに統合されています。これらはすべて無料のオープンソースコードであり、非常に一般的に使用されているので十分な文書とサポートがあります。

Linq2Sqlを使いたいが、フル機能のドメインモデルを使用したい場合は、ドメインモデルをDTOから派生させることを検討することができます。これにより、プロパティをDTOに渡して、ドメイン内にビジネスロジックを持たせることができます。ただし、Linq2SQLオブジェクトはドメインオブジェクトに直接キャストできないことを理解してください。 DTOを取得し、その情報をドメインにコピーするコンストラクタが必要です(少なくともDTOのドメインへの一方向マッピングが必要です)。しかし、ドメインはDTOのよ​​うに扱うことができます(クラスは常に親であるため)、逆変換は必要ありません。ドメインクラスをDTOが必要なリポジトリに渡してください。

+0

はい私の計画はドメインクラスを直接リポジトリに/から渡すことです。だからDTOはなく、実際のP​​OCOもまったく正確ではない。 ...私が読んだすべての議論からの合意は、NHibernateがセットアップするのが簡単ではないことを示すようです。だから私はあまりにも早すぎると思う。 :)しかしそれは良いです。質問の私の目的は、どのような解決策が可能かを知ることです。だから私にとっては良い情報です! – bretddog

+0

NHibernateは本当にそれほど悪くはありません。複雑さの大幅な増加は、DTOを生成するためのスキーマ図を必要とするLinq2SQLとは対照的に、一連のオブジェクト/スキーママッピングを必要とすることです。必要なマッピングが与えられている特定のDBに対してNHibernateを設定するのはかなり簡単です。 – KeithS

+0

はい、私はいくつかのNHibernateのサンプルを見ました。そして、少なくとも私は思ったよりも見やすいです。正しいステップのように感じるので、試してみます。 – bretddog

4

は、AutoMapper

AutoMapperは、オブジェクトのオブジェクトマッパーで見ています。 オブジェクトオブジェクトのマッピングは のタイプの入力オブジェクトを タイプの出力オブジェクトを異なるタイプの に変換することによって動作します。何AutoMapper は興味深いことは、それは限りタイプ BがAutoMapperの確立 大会、ほぼゼロコンフィギュレーション を次のようにBを入力する方法に マップタイプA考え出すのうち、 汚い仕事を取るために、いくつかの 興味深い規則を提供することです2つのタイプをマッピングする必要があります。

+0

ありがとうございます!多分これは素晴らしいです。しかし、私にとっては、少し貧弱な文書のようです。私のレベルでは、余計な頭痛や問題を抱えていると思っています。 – bretddog

関連する問題