UI層としてASP.NET MVC、ビジネス層としてWCF、データベースとしてSQL DBを使用して、3層アプリケーションを作成することを計画しています。
私のビジネス層は、サービス層 (WCF)、ビジネス層 (ビジネス ロジック、ビジネス モデル)、データ層 (エンティティ フレームワーク - DB ファースト) として分割されます。
データ層は、エンティティ フレームワークのエンティティを使用して、Get、GetById、Update、Insert などのリポジトリ メソッドを実装します。
ビジネス層は、ビジネス ルールとそのモデルで構成されます。(これはPOCOにあります)。
サービス層は、可能なサービス メソッドとしてビジネス機能を公開するだけです。
MVC の "M" は単なるプレゼンテーション モデルです。コントローラーが JSON / XML に変換してビューに渡すか、ビューで直接使用するために使用されます。
上記のアプローチは一般的ですが、これが良い設計であるかどうかを確認したいですか?
私の本当の質問は、レイヤー間のデータ転送についてです(UI(MVC)-サービス(WCF)-ビジネス-データレイヤー)
Account とその Traits をデータベースから取得するために GET 操作を開始したとします。データベースでは、2 つの異なるテーブルとして表されます。
- アカウント --> アカウント番号、名前、タイプ
- AccountTraits --> Id、AccountNumber、Category など..
Datalayer 内で、
EF を使用して、指定された AccountNumber のこれら 2 つのテーブル レコードを取得するメソッドを作成したいと考えています。
私のビジネス モデルには、Account と AccountTraits という 2 つのクラスがあります。AccountTraits のオブジェクト コレクションは Account クラスに集約されます。
お気に入り、
public class Account
{
string AccountNumber;
List<AccountTraits> Traits;
}
ここで、これらのドメイン オブジェクトにそのデータを入力する場合は、データ レイヤーで次のような EF クエリを使用できます。
public IEnumerable<Account> GetAccountAndItsTraits(string AccountNumber)
{
var query = from a in db.Accounts
select new Accounts() {
AccountName = a.AccountName,
Traits = from t in a.AccountTraits
....
return query;
}
これは、データ層 (EF) からビジネス モデル POCO を設定するための儀式的なアプローチですか?
さて、いくつかのビジネス ロジックを適用した後、これらのコレクションを UI に戻したいと思います。これらをサービスレイヤーに転送するにはどうすればよいですか?また、UI モデルに渡すにはどうすればよいですか?
ビジネスモデルとして正確なクラス定義を使用してWCFでDataContractを定義し、それに「データをコピー」してUIに渡す必要がありますか? 次に、UI は WCF プロキシ オブジェクトからデータを取得し、「そのプレゼンテーション モデルにコピー」する必要があります (これには、独自の Accounts と AccountTraits が必要です - いくつかの追加フィールドがある場合があります)。
これらのトピックに光を当てていただければ幸いです。
ありがとう!