5

現在、5つのレイヤー(DAL、BLL、ファサード、プレゼンテーションレイヤー、共通レイヤー)を備えたアプリケーションアーキテクチャガイド2.0で説明されているように、マルチレイヤーアーキテクチャを活用するプロジェクトに取り組んでいます。
ここには、ビジネスコンポーネントとビジネスエンティティ(O / Rマッパーを使用して生成されたエンティティ)で構成されるビジネスロジックレイヤーがあります。ユーザーにデータをバインドして提示するために、プレゼンテーションレイヤーにこのエンティティが定期的に必要になるため、このエンティティをバブルします。他のレイヤーを介してプレゼンテーションレイヤーまで。

さて、問題は次のとおり
です。それは正しいアプローチですか?(定義上、これらを共有することになっている場合は、すべてのレイヤーで使用できるように、共通レイヤーに配置する必要があります)。このエンティティを共通レイヤーに移動するべきではありませんか?または、データ転送オブジェクト(DTO)のようなものを定義し、それらをレイヤーに渡す必要があります(もちろん冗長に見えます)。

任意の説明をいただければ幸いです。

4

2 に答える 2

3

適切に階層化されたアプリケーションは、一般にDTOを使用して、他の層のニーズに合わせてビジネスエンティティが偽装されたり歪んだりするのを防ぎます。

ただし、非常に小さなアプリでは、DTOマッピングの負担を軽減し、ビジネスエンティティをUIに渡すことができます。それらをBLLに保持できます。すべてのレイヤーにそれへの参照がある場合、劇的ではありません。アーキテクチャを1つの大きなレイヤーにまとめたので、とにかくそれは実際にはもはやレイヤードアプリケーションではありません。

Mark Seemannは、この問題に関する興味深いブログ投稿をしています。

于 2013-03-07T10:34:30.427 に答える
1

ビジネスエンティティはビジネスレイヤーのみに保持します。DTOは最初は冗長に見えるかもしれませんが、プロジェクトが成長するにつれて、それらの違いに気付くようになります。DTOははるかにフラットで、シリアル化に適したタイプであり、エンティティははるかに複雑な関係とパワーを持ち、DTOよりも多くのアプリケーションロジックを実行します。

DTOはプレーンデータであるため、レイヤー間でそのデータを渡すのに適しています。これらはエンティティを直接表す必要はありません。このため、BLLを変更する必要があるが、サービスコントラクトを維持する必要がある場合は、互換性を向上させることができます。

唯一の例外は、DALとBLLの相互作用であり、DALはエンティティを直接処理します。しかし、ここでもDTOを使用してORMの影響を吸収することができます。

于 2013-03-07T09:24:31.187 に答える