【发布时间】:2012-08-28 01:19:14
【问题描述】:
以您有以下应用程序的场景为例:
- MVC 4 Web 应用程序
- 应用程序通过 Entity Framework 5 与现有数据库通信 (没有计划更改为其他 ORM 或数据库平台)。
- 应用程序与外部 SOAP Web 服务(Web 服务 可能会更改为 WCF)。
你会:
为所有 EF 实体(例如 MyDBRepository),以及 SOAP Web 服务调用的存储库 (例如 MyWSRepository)。然后创建一个服务类,其中包含 业务逻辑使用两个存储库来访问数据和 为控制器的所有需求实现 CRUD 方法 (我的应用程序服务)。然后将存储库注入 服务类,最后将服务类注入 MVC 控制器。
或者您是否有一个服务类来处理数据库查询和 使用 EF 生成的 DBContext 和生成的业务逻辑 表实体(例如 MyDBService)和另一个服务类 处理业务逻辑和 SOAP Web 服务调用(例如 MySOAPWeb 服务)。然后将两个服务都注入到 MVC 中 控制器。
或者别的什么。
过去我使用过选项 1。但我想知道这是否只是添加了不必要的抽象层。如果实体框架生成一个 DBContext,那么拥有一个直接使用 DBContext 实体的服务类似乎不那么复杂。
阅读了 StackOverflow 中的几篇文章和其他问题后,似乎有一条灰线可以区分服务定位器模式和存储库模式。
你会使用哪种结构?
【问题讨论】:
-
我认为“服务定位器”不是这里的问题。进一步:每个人都会同意创建一个单独的服务类来处理 Web 服务是常识。所以你的问题归结为“通用存储库与否”。这里有很多问题和很好的答案。
标签: asp.net-mvc entity-framework repository-pattern service-locator