我需要访问现有sql-database中的一些数据并使用REST-Service(使用Webapi)发布它。
在我之前的非常小的项目中,我刚从控制器直接访问了EF-Context,从我的EF-Entities创建了一些DTO并将其返回给调用者。这很简单,我的工作非常快。
现在,这个项目并没有那么大,但我想做到这一点,正确的方式'这一次,每个人都在谈论分层架构,即使对于一个小项目,所以单元测试等更容易。
作为一个新手(是的,我需要阅读更多书籍)我决定开始阅读大量关于应用程序的架构设计等博客文章。
首先要了解使用EF访问数据库中的数据的各种技术(我使用v6.2,DB-First)。有人说,你需要为每个实体建立一个存储库,有人说,创建一个通用的存储库,其他人说,存储库是新的邪恶,不惜一切代价避免它们。
我读过的一些博文:
generic-dal-using-entity-framework
is-the-repository-pattern-useful-with-entity-framework
repositories-on-top-unitofwork-are-not-a-good-idea
why-entity-framework-renders-the-repository-pattern-obsolete
favor-query-objects-over-repositories
等等。
即使是其他人说,将EF生成的POCO分开也应该与纯粹的POCO分开。 EF-stuff就像EDMX:splitting-entity-framework-model-classes-separate-projects
有些帖子很旧,可能已经过时,但我只是在努力寻找完成任务的最佳方法。
现在,我有4个项目:
DGO.Core:包含我的DTO&#39>
DGO.Data:包含我的EF-Stuff和1个Repository-Class(详见下文)。
DGO.Service:引用DGO.Data并访问repository-class公开的方法。
DGO.Webapi:引用所有三个DLL,但使用Service-Dll中的方法。 我需要引用Data-Dll才能注入数据存储库。
所以现在我的db-queries驻留在Data-DLL中(在所谓的repository-class中),它从我的Core-DLL创建了填充的DTO。然后将这些DTO传递给Service-DLL,它可以在这里和那里处理一些逻辑,然后将这个DTO传递给Webapi-Controller。
这是通过所有层传递这些DTO的常用方法吗? 或者将POCO与EDMX分开并直接在我的服务层中使用它们会更好。
所以方向将是'数据层' - > '波苏斯' - > '服务层' - > ' DTO的' - >客户(控制器等)。
查询应该在哪里进行?我认为,在数据层,但有人说,它应该在服务层完成。我认为,数据层负责查询数据,服务层负责工作'与数据。
希望,我明白了问题。如果有必要,可以提供代码。 谢谢!