繁体   English   中英

如果Entity Framework / DbContext是DAL / Repository,它在哪里适合3层架构?

[英]If Entity Framework / DbContext is the DAL / Repository, where does it fit within 3-tier architecture?

我一直在阅读关于StackOverflow和其他网站的关于最佳架构实践的文章,并且存在许多相互矛盾的想法和观点。

我最终确定了一种方法,但我很难确定放置EF对象的位置(DbContext,Fluent API,种子数据等)。 这是我目前拥有的:

ASP.NET MVC项目 :实际的Web项目。 包含标准视图,控制器和视图模型(在Models文件夹中)。

域模型项目 :包含定义数据库(域)对象的所有POCO类。 目前,没有提及或引用任何EF对象。

服务层项目 :包含每种类型的域对象的服务对象(例如,IProductService,IOrderService等)。 每个服务都引用像DbSets这样的EF对象并处理业务规则 - 例如,添加产品,获取产品,将产品附加到订单等。

所以问题是,在这个配置中,EF类会去哪里? 最初我想在服​​务层,但这似乎没有意义。 然后我想把它们放在域模型层中,但是它将域模型绑定到EF,它本质上是一个DAL / Repository。 最后,我考虑为EF创建一个单独的DAL项目,但考虑到它可能有3-4个文件(DbContext和一些其他小文件),这似乎是一个巨大的浪费。

有人可以提供任何指导吗?

不需要域模型,因为它将是冗余。 EF类直接可以充当域模型,并在将其发送到View时将它们转换为View Models。 EF可以分成不同的类库。 他们中的大多数都使用存储库模式以及任何ORM,如果他们要替换它们会很容易。 但我已经看到了使用存储库模式,请批评这一出。

这是我做的:

数据:

  • 有一个类继承自DbContext。
    • 它拥有所有数据库集。
    • 覆盖OnModelCreating。
    • 映射主键和关系。

实体:

  • 有每个POCO课程。
    • 每个属性都装饰有所需的数据注释。

服务:

  • 每个服务都有常用的方法(GetList(),Find(),Create()等)。

商业:

  • 从客户端调用,使用服务协调执行特定任务UserChangePassword(这将检查是否可以执行此任务,然后执行任务,或返回错误/未授权状态以使客户端显示有关任务的正确信息。 在我的情况下是我记录的地方。

客户端(桌面/ Web / Wpf /等)。

我不是说这是最好的方法,我只是分享一直在为我工作的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM