4

DTO/BOについての私の質問の1つは、いつDTOを渡し/返すのか、そしてBOを渡し/返すのかについてです。DTOsとBOの使用

私の腸管反応は、常にNHibernateをBOでなくDTOにマップし、常にDTOをパス/リターンするように指示します。ビジネスロジックを実行する必要があるときはいつでも、私はDTOをBOに変換します。

私のやり方は、私のBOは、DTOとBOの両方が唯一のものとして実装している(必要なフィールド/プロパティを定義する)インタフェースの型であるパラメータをとるコンストラクタを持っているということです。引数。

次に、コンストラクタでDTOを渡すことでBOを作成することができます(両方とも同じプロパティを実装するので、両方とも同じプロパティを持ちます)、そのBOでビジネスロジックを実行できるようになります。私はまた、BOをDTOに変換する方法もあります。

しかし、人々がBOでしか作業していないようで、バックグラウンドでDTOを使用しているユーザーはDTOがないように見えます。

このアーキテクチャにはどのような利点/欠点がありますか、常にBOを使用していますか?

私は常にDTOまたはBOのいずれかを返すか、またはミックスとマッチする必要がありますか(ミックスとマッチングのように混乱する可能性があります)。

+2

あなたはあなたの質問を段落に分割するまで、あなたの質問を読んでいません。 –

答えて

2

これは達成したいことによって異なります。私は自分自身のことを教えてくれます。私はDTOとBOの両方をNHibernateにマップしていますが、DTOは不変としてマップされていますので、BOを使わずにデータベースを誤って更新することはありません。

WebServicesでアクセス可能なすべてのクエリがDTOを返す/受け入れます。

DTOから更新するたびに、私はUnitOfWorkを実行します。ここでBOをロードし、DTOからプロパティを更新し、それが有効であれば再度保存します。

クライアントでは、クライアントがそれを変更する必要があるときはいつでも、私はDTOからBOを作成します(AutoMapperはここでは有効です)。 BOには、NHibernateのやり方に似た、すべての議論が必要です。

*ワイヤを通過するデータ量の全体制御(DTOは通常は平坦化されているため、最初の呼び出しで関連付けられたクラスのIDのみが送信されます)。 *両方で同じプロパティを持つ必要はありません。 *希望通りに遅延読み込みを混在させることができます。 * BOで作成せずにDTOでスカラークエリやその他の計算プロパティを利用できます。 * BOごとに異なるシナリオで複数の異なるDTOを持つことができます。

だから、私はそれが混合およびマッチングなどが、:-)

・ホープ、このことができます私は明確なガイドラインと資格うと思います。

0

私はこれがかなり古い質問であることを知っていますが、私はこの主題について私の "十セント"を与えてください。

MVCプロジェクト(Entity FrameworkまたはNHibernateを使用していても)と一緒に作業するときは、フラットな動作、ワイヤ上のデータの不足、および最後の作業(少なくとも重要なこと)のためにPOCOを永続性およびDTO/ViewModelsに使用します貴重な)、彼らはいかなる方法でもオブジェクト間の関係を公開しません。

「銀色の弾丸」のように聞こえるかもしれませんが、少なくともそれは私のためにしばらく働いています。

(英語の間違い=))

関連する問題