私は中小規模のプロジェクトを開始しようとしています。私は決してソフトウェアアーキテクトではない。しかし、私は時々行うすべての動きに疑問を抱く傾向があります。私は正しいことをしたいので。単純なリポジトリasp.net mvc with entity framework
私は単純なリポジトリを実装する方法を見つけました。これが "正しい"方法であるかどうかを知りたかったのです。私は知識がある前に何が起こっているのかを知っていて、複雑なものを取り入れていないので、私はこの解決策に来ました:)
ここでそれが行きます。私は同じdbcontextの下にすべての私のリポジトリを維持することを確認し、作業
の
ユニット。私の宇宙では、コントローラから呼び出すときにすべてのレポにアクセスすることができます。
public class UnitOfWork : IDisposable
{
private ContactRepository _contactRepo;
private ApplicationDbContext _entities;
public UnitOfWork(ApplicationDbContext entities)
{
_entities = entities;
}
public ContactRepository ContactRepo
{
get
{
if (_contactRepo == null)
{
_contactRepo = new ContactRepository(_entities);
}
return _contactRepo;
}
}
public void Save()
{
_entities.SaveChanges();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_entities.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
ContactRepository
これは、それがdbcontextをrecievesと私が好きなデータをつかむためにそれを使用してリポジトリの短い例である
public class ContactRepository
{
private ApplicationDbContext _entities;
public ContactRepository(ApplicationDbContext entities)
{
_entities = entities;
}
public IEnumerable<Contact> GetAll()
{
return _entities.Contacts;
}
}
コントローラ
翔私は私が目指したのと同じdbcontext下のすべての私のリポジトリにアクセスする必要があります。このように、コントローラ
public class ContactController : Controller
{
UnitOfWork uow = new UnitOfWork(new ApplicationDbContext());
public ActionResult Index()
{
var contacts = uow.ContactRepo.GetAll();
return View(contacts);
}
protected override void Dispose(bool disposing)
{
uow.Dispose();
base.Dispose(disposing);
}
}
のRT例。
私は物事がよりスマートに/異なることができることを知っています。たとえば、拡張可能な汎用リポジトリを使用します。しかし、この場合、私は単純で分かりやすいものを目指しています。しかし、大きな欠陥がある場合、まだ大きな勘違いをしたくない。
データトラフエンティティフレームワークをこのように処理する方法に大きな欠陥がありますか?
アーキテクチャは罰金です私には、どちらも建築家ではありません。 http://codereview.stackexchange.com/ – Eldho