C#/ ASP.NETを使用してモデルタイプをリポジトリタイプにマップすることが可能かどうか疑問に思っていました。ご覧のとおり、私はリポジトリ/作業単位のパターンを実装しようとしています。ASP.NETマップのモデルタイプがリポジトリタイプに対応していますか?
public class UnitOfWork : IDisposable
{
private SchoolContext context = new SchoolContext();
private DepartmentRepository departmentRepository;
private CourseRepository courseRepository;
public DepartmentRepository DepartmentRepository
{
get
{
if (this.departmentRepository == null)
{
this.departmentRepository = new DepartmentRepository(context);
}
return departmentRepository;
}
}
public CourseRepository CourseRepository
{
get
{
if (this.courseRepository == null)
{
this.courseRepository = new CourseRepository(context);
}
return courseRepository;
}
}
しかし、UnitOfWorkは各リポジトリタイプのプロパティの長いリストを保持する必要がありますが、問題があります。この例では、対応する2つのリポジトリ(分割リポジトリとコースリポジトリ)を持つエンティティタイプが2つ(部門、コース)しかないため、それほど悪くはありません。しかし、アプリケーションのサイズが大きくなると、UnitOfWorkクラスはすばやく大きくなり、数十、または数百のプロパティが混乱します。これは神クラス以外のものではありません。
私が望むのは、モデルタイプをリポジトリオブジェクトにマップするジェネリックメソッドGetRepository()など、より一般的なものです。以下の疑似コードは、私が望むものを示しています。
// definition
public TRepository GetRepository<TModel>(){ // pending implementation }
// use-case
var departmentRepository = UnitOfWork.GetRepository<TModel>();
したがって、モデルタイプをリポジトリオブジェクトにマップするコードを書くことはできますか? AutoMapperは、ジェネリック型ではなく、具体的な実装間でのマッピングにすぎないので、うまくいきません。どう思いますか?作業単位のプロパティとして、リポジトリの実装ごとにハードコードするのではない場合に、この問題にどのようにアプローチしますか?
UnitOfWorkからリポジトリを削除します。リポジトリにUoWを挿入し、コンテキストからエンティティセットを取得します。 – Jasen
依存性注入と制御の逆転のための仕事のように見えます。あなたはIOCブートストラップのモデルとそれに対応するリポジトリの関連付けを登録します... – Theo
これを解決するためにあなた自身のマッパーを書くことができます –