实体之间通过服务层的通信

时间:2019-06-19 12:12:05

标签: c# asp.net asp.net-mvc repository-pattern

我在Asp.net MVC中有一个带有Web层的项目,然后是用于业务逻辑的Service层,然后是用于数据访问的Repository层。我正在使用统一性进行依赖注入。

MVC->服务->存储库-> EF

我有负责产品相关数据操作的产品服务,还有一个负责订单保存和其他更新的订单服务。在某些情况下,我想访问Order服务中的产品数据,为此,我将Product服务的实例注入到Order服务中,而不是直接将Product存储库访问到Order服务中。

在这里我想知道哪种方法更好,或者我不应该将产品数据访问到订单服务中? 注入产品实例的一个缺点是,每当统一要创建Order服务的实例时,都必须创建Product服务的实例。

3 个答案:

答案 0 :(得分:0)

直接访问Product服务到Order服务是最好的方法。

注入您越来越多的依赖项似乎不是您所讨论的好选择。尽管您使用的是DI框架,但仍然要付出一定的代价。

OTOH,存储库是服务的下层。绝对应允许一项服务访问任何存储库。我没有看到与此相关的任何技术或模式相关问题。实际上,这解决了许多问题。

答案 1 :(得分:0)

也许您可以使用服务定位器模式。在服务定位器中,您不必将其插入另一个服务中。

https://www.geeksforgeeks.org/service-locator-pattern/

答案 2 :(得分:0)

通常,在我使用的MVC项目中,服务通常由存储库组成,但是服务也可以使用其他服务。您只需要注意循环依赖。在某些情况下,我拆分服务以避免循环引用,通常是因为服务变得太大或承担了多个域职责。因此,ProductService可能会分为ProductCalculatorService和ProductSearchService,只有后者被注入OrderService,以避免循环依赖关系,但仍保持DRY代码。

相关问题