EF を使用してデータ アクセスを処理する小さな個人プロジェクトを作成しようとしています。私のプロジェクト アーキテクチャには、UI レイヤー、サービス レイヤー、ビジネス レイヤー、およびデータ アクセス レイヤーがあります。EF は DAL 内に含まれています。UIからDALを参照するのは正しくないと思います。そのため、すべてのレイヤーで共有される「ビジネス オブジェクト」のカスタム クラスを作成したいと考えています。
例: User テーブルがあります。EF は User エンティティを作成します。おそらくGetListOfUsers()へのメソッドがあります。プレゼンテーションでは、UI に DAL への直接リンクがあるため、リストで返信しないでください。おそらく次のようなメソッドを DAL で公開する必要があります。
List<MyUserObject> GetListOfUsers();
次に、ユーザー エンティティのリストを返す GetListOfUsers という内部メソッドを呼び出し、それらを MyUserObejcts に変換し、レイヤーを介して UI に戻します。
それは正しい設計ですか?私は、UI やビジネス レイヤーにエンティティ フレームワークに関する知識が必要だとは思いません。
しかし、これが意味することは、DAL とビジネス レイヤーの間にエンティティをカスタム オブジェクトに変換する「変換レイヤー」が必要なのでしょうか?
編集:
これが私がやっていることの例です:
Entity Framework を含むデータ アクセス プロジェクトがあります。このプロジェクトでは、状態のリストを取得するメソッドを用意します。
public class DataAccessor
{
taskerEntities te = new taskerEntities();
public List<StateObject> GetStates()
{
var transformer = new Transformer();
var items = (from s in te.r_state select s).ToList();
var states = new List<StateObject>();
foreach (var rState in items)
{
var s = transformer.State(rState);
states.Add(s);
}
return states;
}
}
私の UI/ビジネス/サービス プロジェクトは、エンティティ フレームワーク オブジェクトについて認識してはなりません。代わりに、カスタム ビルドの State オブジェクトを認識している必要があります。したがって、カスタム ビルド オブジェクトを含む共有ライブラリ プロジェクトがあります。
namespace SharedLib
{
public class StateObject
{
public int stateId { get; set; }
public string description { get; set; }
public Boolean isDefault { get; set; }
}
}
したがって、私の DAL は項目を Entity オブジェクトのリストに取得し、それらを変換メソッドに渡して、それらをカスタム buily オブジェクトにします。変換は EF オブジェクトを受け取り、カスタム オブジェクトを出力します。
public class Transformer
{
public StateObject State (r_state state)
{
var s = new StateObject
{
description = state.description,
isDefault = state.is_default,
stateId = state.state_id
};
return s;
}
}
これはうまくいくようです。しかし、それは有効なパターンですか?