我刚开始阅读有关使用存储库和工作单元模式的信息。我目前正尝试在一个asp.net web窗体应用程序中使用它与实体框架。但是,我确实有一个问题,我不确定我是否能够以简单的方式解释。实体框架中的UOW和存储库asp.net应用程序
从我所了解的工作单位是用来封装业务交易。从实施例中我看到UOW是以下列方式
businessMethod1()
{
uow u = new uow(); //instantiate unit of work
repository1 rep1 = new repository1(uow); //instantiate repository1
repository2 rep2 = new repository2(uow); //instantiate repository1
rep1.dowork();
rep2.dowork();
u.save(); //save the changes made to the database. (effectively saving changes made
//in both repository classes
}
使用现在假设我有一个businessMethod2()
其类似于上面描述的方法。假设我想在businessMethod2()
之内使用businessMethod1()
,那么最佳做法是什么。我想分享工作单位,所以我应该把它作为一个论点来传递?即改变上述方法
businessMethod1(uow u)
{
bool isNew = false;
if (u == null)
{
u = new uow();
isNew = true;
}
repository1 rep1 = new repository1(uow); //instantiate repository1
repository2 rep2 = new repository2(uow); //instantiate repository1
rep1.dowork();
rep2.dowork();
if (isNew)
u.save(); //save the changes made to the database.
}
这是一个正确的方式来处理这个?
我想一个更好的方法是使用单身人士uow。在每个页面请求上,创建一个uow的新实例并由所有业务方法共享。在新请求上创建不同的实例。使用单身乌鸦将意味着我不必将其传递给我的任何业务方法,并且可以同时分享它所有的业务方法。
这样做有什么缺点吗?还有更好的方法来实现这个吗?
这是我一直热衷于研究的东西,我从未见过UoW存储库的良好实现,但我确定它们在某处。 –