以您有以下应用程序的场景为例:
- 一个 MVC 4 Web 应用程序
- 该应用程序通过 Entity Framework 5 与现有数据库通信(没有计划更改为另一个 ORM 或数据库平台)。
- 应用程序与外部 SOAP Web 服务(Web 服务可能更改为 WCF)对话。
你会:
为所有 EF 实体创建一个通用存储库(例如 MyDBRepository),并为 SOAP Web 服务调用创建一个存储库(例如 MyWSRepository)。然后创建一个包含业务逻辑的服务类,使用这两个存储库来访问数据并为所有控制器的需求(MyApplicationService)实现 CRUD 方法。然后将存储库注入服务类,最后将服务类注入 MVC 控制器。
或者,您是否有一个使用 EF 生成的 DBContext 和生成的表实体(例如 MyDBService)来处理数据库查询和业务逻辑的服务类,以及另一个处理业务逻辑和 SOAP Web 服务调用的服务类(例如 MySOAPWebService)。然后将这两个服务都注入到 MVC 控制器中。
或者是其他东西。
过去我使用过选项 1。但我想知道这是否只是添加了不必要的抽象层。如果实体框架生成一个 DBContext,那么拥有一个直接使用 DBContext 实体的服务类似乎不那么复杂。
在阅读了 StackOverflow 中的几篇文章和其他问题后,似乎有一条灰线可以区分服务定位器模式和存储库模式。
你会使用哪种结构?