实体之间通过服务层进行通信
Communications between entities through service layer
我有一个项目,在 Asp.net MVC 中有 Web 层,然后是用于业务逻辑的服务层,然后是用于数据访问的存储层。我正在使用 unity 进行依赖注入。
MVC -> 服务 -> 存储库 -> EF
我有Product service,负责产品相关的数据操作,一个是Order service,负责Order saving, else update。在某些情况下,我想访问订单服务中的产品数据,为此我将产品服务实例注入订单服务,而不是直接将产品存储库访问订单服务。
我想知道什么是更好的方法,或者我不应该将产品数据访问订单服务?
注入产品实例的一个缺点是,每当 unity 想要创建订单服务实例时,它必须创建产品服务实例。
直接访问 Product
存储库进入 Order
服务是最好的方法。
如您所说,注入越来越多的依赖项似乎不是一个好的选择。虽然你用的是DI框架,但还是要付出代价的。
OTOH,存储库是服务的下层。绝对应该允许一项服务访问任何存储库。我没有看到任何与此相关的技术或模式相关问题。 In-fact,这解决了很多问题。
也许您可以使用服务定位器模式。在服务定位器中,您不必将服务注入另一个服务。
一般在我用过的MVC项目中,Services通常由Repositories组成,但Services也可以使用其他Services。你只需要注意循环依赖。在某些情况下,我拆分服务以避免循环引用,通常是因为服务变得太大或获得了多个域职责。因此,ProductService 可能会被拆分为 ProductCalculatorService 和 ProductSearchService,并且只有后者被注入到 OrderService 中以避免循环依赖,但仍保持 DRY 代码。
我有一个项目,在 Asp.net MVC 中有 Web 层,然后是用于业务逻辑的服务层,然后是用于数据访问的存储层。我正在使用 unity 进行依赖注入。
MVC -> 服务 -> 存储库 -> EF
我有Product service,负责产品相关的数据操作,一个是Order service,负责Order saving, else update。在某些情况下,我想访问订单服务中的产品数据,为此我将产品服务实例注入订单服务,而不是直接将产品存储库访问订单服务。
我想知道什么是更好的方法,或者我不应该将产品数据访问订单服务? 注入产品实例的一个缺点是,每当 unity 想要创建订单服务实例时,它必须创建产品服务实例。
直接访问 Product
存储库进入 Order
服务是最好的方法。
如您所说,注入越来越多的依赖项似乎不是一个好的选择。虽然你用的是DI框架,但还是要付出代价的。
OTOH,存储库是服务的下层。绝对应该允许一项服务访问任何存储库。我没有看到任何与此相关的技术或模式相关问题。 In-fact,这解决了很多问题。
也许您可以使用服务定位器模式。在服务定位器中,您不必将服务注入另一个服务。
一般在我用过的MVC项目中,Services通常由Repositories组成,但Services也可以使用其他Services。你只需要注意循环依赖。在某些情况下,我拆分服务以避免循环引用,通常是因为服务变得太大或获得了多个域职责。因此,ProductService 可能会被拆分为 ProductCalculatorService 和 ProductSearchService,并且只有后者被注入到 OrderService 中以避免循环依赖,但仍保持 DRY 代码。