8

ASP.NET WebフォームC#を使用して、ソリューションを最初から作成しています。

各レイヤーにモデルオブジェクトの重複セットを作成したくないので、モデルオブジェクトについて心配しています。の3層アーキテクチャでモデルオブジェクトを使用するためのベストプラクティスは何Web Formsですか?

私が考えている構造は次のとおりです。

  • UI
  • BLL
  • DAL
  • モデル

モデルには、レイヤーの各セクションで使用できるすべてのモデルクラスが含まれます。各レイヤーがモデルオブジェクトにアクセスする必要があるので、これは便利だと思いました。例えば:

  1. UIは、データで満たされたモデルオブジェクトを渡すBLLのメソッドを呼び出します。
  2. BLLは、データベースなどに保存されているオブジェクトを通過するDALのメソッドを呼び出します。

ありがとう

4

4 に答える 4

9

モデルは、レイヤーとの横断的関心事になる可能性があります。これは、それを行うための迅速な方法です。または、BLLのようなものでインターフェースを単純に肉付けできるように、モデルのインターフェースを作成することもできます。これにより、少なくとも横断的なインターフェースが停止します。

さらに、モデルが単純なデータコンテナであるか(貧血ドメインモデル)、またはモデル自体を検証したり変更を追跡したりする機能(リッチドメインモデル)などの動作が含まれているかどうかによって異なります。

DALは、実際には2つの部分で構成されていることがわかります。データベースと通信するアプリコードに固有ではないボイラープレートと、アプリ固有のモデルに入力するコードです。このような状況があります。モデルのインターフェースを共有しています。アプリ固有のDALコードは、モデルからデータをプッシュおよびプルするためにこのインターフェースを使用できますが、「真の」DALコードは未加工のもので機能します。

于 2012-01-05T11:19:14.733 に答える
5

比較的小さなアプリケーションでは、あなたはあなたDomain Entitiesまでずっとあなたを共有することができますPresentation layerが、これがもたらす結合に注意してください。

データバインディングで、プロパティとCustomerプロパティAddressを持つタイプのエンティティを除く場合、すべてのレイヤーが緊密に結合されており、1つのレイヤーを変更すると、他のレイヤーも変更される可能性があります。StreetLine1StreetLine2

したがって、プロジェクトの規模と結合の量に基づいて決定する必要があります。

低結合設計を選択する場合は、BLLを使用してDALエンティティを取得し、それらのエンティティを使用して動作を実行します。次にBLL、はを使用Data Transfer Objectsしてあなたに渡すので、あなたとあなたPresentation layerの間に結合はありません。presentation layerDomain Model

于 2012-01-05T12:04:32.747 に答える
1

ここで私の答えを見てください:https ://stackoverflow.com/a/7474357/559144  これは、MVCとエンティティフレームワークだけでなく、私が物事を行う通常の方法であり、うまく機能します...実際、MVCではモデルは下位層で定義された実際のビジネスエンティティに含まれるフィールドの一部のみを含むエンティティタイプ。UIレベルのすべてのフィールドも本当に必要か、データのレンダリングと入力を行うために一部のみが必要かによって異なります。 

于 2012-01-12T09:48:03.577 に答える
0

関連するトピックとして、クロスプラットフォームのクライアント/サーバーシステムでのコードの重複の回避と正しいアーキテクチャについて最近投稿したこの関連する回答を参照してください。

これは完全な回答を意図したものではなく、質問に関連する有用な情報であるため、このスレッドの他のポスターを+1しました。

よろしくお願いします、

于 2012-01-05T12:08:22.437 に答える