エンティティフレームワークレイヤガイダンスエンティティフレームワークとWPFアプリケーション設計ガイダンス
私はWPFビジネスアプリケーションの設計段階にあります。このアプリケーションの第1段階はWPF/Desktopアプリケーションです。後の反復は、ブラウザベースのミニバージョンを含むことができる。
すべてのアプリケーション(デスクトップまたはブラウザ)が使用するドメインモデル& dbcontextを含むdllまたは2を作成することを想定しています。
私の意向は、EFで乗るか死ぬことです。私は柔軟性のためにDI /リポジトリパターンなどを使用することについて心配していません。このプロジェクトを使用する利点は、このプロジェクトのための私の意見の複雑さを上回るものではありません。私の計画は、モデルと派生したdbcontextを使用することです。
私は、特定のタイプのメソッドコードをどこに配置するかについての入力を探しています。
の例では、うまくいけば、私の質問は、より明確になります:従業員
エンティティ:これら二つの内部PermissionToken
だが、私は次の2つのエンティティ..
エンティティがあるとしましょうエンティティManyToMany関係を持っているため、関係の別のエンティティが作成されます。 EmployeesPermissionTokens
明確にするために、PermissionTokenエンティティの主キーは、アクセス権を表す列挙型です。..アプリケーションで
は、現在のユーザーが、従業員の管理や従業員に権限を付与したいと言うことができます。アプリで
、私は確かとしてこれをコーディングすることができます:
var e = dbcontext.Employees.Find(1);
var pt = new PermissionToken
{
PermissionID=PermissionTypeEnum.DELETEUSER";
...
}
e.PermissionTokens.Add(pt)
しかし、1行のコードは、これらのアクションを実行することができるようにする方法でそのコードをラップする方が便利だろうと私には思えますどんなアプリケーションからでもそうすることを選択します。そのような方法はどこにあるのでしょうか?
私はEFエンティティへの静的メソッドを追加する方法について考えた:
従業員クラスで:
public static void GrantPermission(PermissionToken token)
{
e.PermissionTokens.Add(token);
}
はアプリがする能力になり、本当に便利になるのか、さらに行きますもちろん
Permissions.GrantToEmployee(EmployeeID employeeId, PermissionTypeEnum
permissionId);
方法は、EmployeeオブジェクトとPermissionObjをつかむためにDbContextにアクセスできるようにしなければならないことを意味します。このような行を書きますその仕事をするためにIDによって行動する。私は、私の考えではModelクラスにすべきではないdbcontextコードでいっぱいになったエンティティを長期間感じているので、私のエンティティがDbContextを知っていることを知っていることを避けたいと思っています。
だから、このような方法はどこに行きますか?
これらの種類のことを行うために、このメソッドはDbContextにアクセスする必要があるため、これらの種類のコードを派生したDbContextに配置するように指示します。
これは意味がありますか、何か不足していますか?私はコードの冗談を書いて3ヶ月後に私が間違った道を歩み始めたことを知りたくありません。これらのタイプのメソッドはどこに存在すべきですか?おそらく純粋な答えがあるのは分かっていますが、私はきれいで現実味のあるソリューションを探しています。
データアクセスを新しいプロジェクトに移動します。これらのメソッドをメインアプリケーションに提供する新しいクラスを作成します。このクラスをEmployeeServiceと呼びます。次に、 'employeeService.Grant(employeeId、permissionId)'を持つかもしれません。 – Jasen