Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 工作单元和关注点分离?_Entity Framework 4_Asp.net Mvc 3_Repository Pattern_Unit Of Work_Service Layer - Fatal编程技术网

Entity framework 4 工作单元和关注点分离?

Entity framework 4 工作单元和关注点分离?,entity-framework-4,asp.net-mvc-3,repository-pattern,unit-of-work,service-layer,Entity Framework 4,Asp.net Mvc 3,Repository Pattern,Unit Of Work,Service Layer,我正在MVC应用程序中使用UnitOfWork/Service Layer/Repository/EF4 w/POCO设计 到目前为止,我有: 1) MVC Web应用程序(Project.dll) 2) 服务层(Project.Data.Services.dll) 3) 存储库层(Project.Data.Repositories.dll) 4) POCOS(Project.Data.Domain.dll) 5) EF4/上下文层(Project.Data.dll) 每个层仅引用下面的层和Pr

我正在MVC应用程序中使用UnitOfWork/Service Layer/Repository/EF4 w/POCO设计

到目前为止,我有:

1) MVC Web应用程序(Project.dll)
2) 服务层(Project.Data.Services.dll)
3) 存储库层(Project.Data.Repositories.dll)
4) POCOS(Project.Data.Domain.dll)
5) EF4/上下文层(Project.Data.dll)

每个层仅引用下面的层和Project.Data.Domain(POCO类)


我目前在Project.Data.dll中有UnitOfWork接口/Base,但现在所有层都必须引用它。那是个糟糕的设计吗?如果是这样的话,它住在哪里?

我认为如果使用依赖注入,效果会更好。你可以看看这篇很棒的帖子:

我认为如果你使用依赖注入,效果会更好。你可以看看这篇很棒的帖子:

这只是一个观点

域对象是业务的一部分。contextes和存储库也是如此

事实上,我的观点是OR/M是对关系数据库或其他类型存储的抽象,因此它们可以充当面向对象的存储

在现代软件解决方案中,OR/M丢弃了数据层

存储库、域上下文、域对象是业务层的一部分

工作单元是一种软件设计模式,它不仅用于处理数据库或数据层,还可以管理更多的事情,比如网络事务。我建议这应该包含在一些名称空间中,比如“YourCompany.YourProject.Patterns.UnitOfWork”之类的名称空间

服务与数据无关。我建议使用“YourCompany.YourProject.Services”名称空间

另一点是,您的POCO似乎也像DTO一样工作,因为您在任何地方都在使用,甚至用于通过层和/或层传递数据。这在裸体对象实现或类似的实现中是可以的,但您需要注意使用域对象作为DTO的事实,因为它们可能包含属性、信息、行为或/M代理隐藏成员,这些隐藏成员可能会影响对象的权重-内存使用率

考虑到最后一段事实,我建议您在业务之上的任何层中使用DTO,这样您的服务将返回DTO,其中包含服务消费者需要正常工作的特定属性范围

DTO、模式的实现以及在所有项目中共享的东西—解决方案的一部分—应该存在于某个名为“YourProject.shared”的项目中,并且此程序集不得引用任何层:它必须保持层中立,因此在任何地方引用它都不会强制产生无用的依赖关系

嗯,这是我的观点和我在项目中的工作方式。

这只是一种观点

域对象是业务的一部分。contextes和存储库也是如此

事实上,我的观点是OR/M是对关系数据库或其他类型存储的抽象,因此它们可以充当面向对象的存储

在现代软件解决方案中,OR/M丢弃了数据层

存储库、域上下文、域对象是业务层的一部分

工作单元是一种软件设计模式,它不仅用于处理数据库或数据层,还可以管理更多的事情,比如网络事务。我建议这应该包含在一些名称空间中,比如“YourCompany.YourProject.Patterns.UnitOfWork”之类的名称空间

服务与数据无关。我建议使用“YourCompany.YourProject.Services”名称空间

另一点是,您的POCO似乎也像DTO一样工作,因为您在任何地方都在使用,甚至用于通过层和/或层传递数据。这在裸体对象实现或类似的实现中是可以的,但您需要注意使用域对象作为DTO的事实,因为它们可能包含属性、信息、行为或/M代理隐藏成员,这些隐藏成员可能会影响对象的权重-内存使用率

考虑到最后一段事实,我建议您在业务之上的任何层中使用DTO,这样您的服务将返回DTO,其中包含服务消费者需要正常工作的特定属性范围

DTO、模式的实现以及在所有项目中共享的东西—解决方案的一部分—应该存在于某个名为“YourProject.shared”的项目中,并且此程序集不得引用任何层:它必须保持层中立,因此在任何地方引用它都不会强制产生无用的依赖关系


那么,这是我在我的项目中的观点和工作方式。

如果您不希望其他层引用数据项目,则必须分离
i工作单元
以分离项目,并使用依赖项注入和一些反转控制容器。

如果您不希望其他层引用数据项目,则必须分离
IUnitOfWork
分离项目,并使用依赖项注入和一些反转控制容器。

看看它有一个Northwind示例,它与您的。您将看到UnitOfWork实现

看一看,它有一个Northwind示例,它的层次与您的类似。您将看到UnitOfWork实现

@Mat-我在我的MVC应用程序中使用查看/编辑模型,然后使用AutoMapper将POCO映射到模型。好吧,我已经用你在问题中所说的信息回答了你!:无论如何,我只是解释了一下,为了给你一个正确的命名方向,因为即使你使用AutoMapper或其他东西,用正确的命名调用东西也是有意义的,所以源代码更可读,或者,至少,东西在正确的位置。@Mat-那么你不认为存储库和下面的是数据层吗?我当然同意POCO是业务对象,但我认为存储库和ef是数据。否?存储库不是“数据”。存储库是负责将业务转换为数据、将数据转换为业务的实体,其工作方式类似于对象的集合。和E