我刚刚开始阅读有关使用存储库和工作单元模式的信息。我目前正在尝试在 asp.net web 表单应用程序中将它与 Entity Framework 一起使用。然而,我确实有一个问题,我不确定我是否能够以简单的方式解释。
据我了解,工作单元用于封装业务事务。从我看到的例子中,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()
。假设我想在 businessMethod1()
中使用 businessMethod2()
什么是最佳实践。我想共享工作单元,所以我应该将它作为参数传递吗?即改变上面提到的方法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 意味着我不必将它传递给我的任何业务方法,并且可以同时与我的所有业务方法共享它。
这样做有什么缺点吗?还有没有更好的方法来实现这一点?
最佳答案
解决这个问题的一种方法是使用依赖注入(inject)。通常构造函数注入(inject)与单个入口点一起使用来解决依赖关系。
public class MyBusinessService
{
public MyBusinessService(Repository1 repository1, Repository2, uow u)
{
// assign the params to fields
}
public void businessMethod1()
{
}
public void businessMethod1()
{
}
}
有许多流行的 DI 框架。选择你认为对你有用的东西。
关于asp.net - Entity Framework asp.net 应用程序中的 UOW 和存储库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8980007/