次のレイヤーを持つ WPF アプリケーションを作成しています。
UI (ビュー + ビューモデル) -> BLL -> DAL
これらはすべてドメイン モデル レイヤーを参照します。
現時点では、BLL を介して UI から DAL にすべての DB 呼び出しを伝えています。しかし、これが正しい方法かどうかはわかりません。
BLL のほとんどのメソッドは次のようになります。
public ICollection<User> GetUsers()
{
return dbAccess.GetUsers();
}
次に、DAL で同様のメソッドを呼び出します。
public ICollection<User> GetUsers()
{
using (var context = new DbContext())
{
return context.Users.ToList();
}
}
1) BLL から DAL への呼び出しを伝達するこの方法は、かなり冗長に思えます。もちろん、実際に少しのビジネス ロジックを保持する BLL メソッドがいくつかあります。BLLを捨てるべきですか?
2) このアプローチのもう 1 つの問題は、DbContext が作成され、DAL で破棄されるため、遅延読み込みを使用できないことです。これは ViewModel で DbContext を作成することで解決できると思いますが、いつ破棄する必要がありますか?
3) 最後に、遅延読み込みを使用していないため、関連するエンティティを熱心に読み込む必要があります。しかし、すべてのビューが同じ関連エンティティを必要とするわけではないため、同じエンティティを返すがインクルードが異なる複数のメソッドが必要になることがよくあります。これでいいの?
X) すべての DB メソッドは、DbAccess と呼ばれる 1 つの大規模なクラスに存在します。ViewModel ごとに (またはエンティティごとに) DB サービス クラスを作成したほうがよいでしょうか?