c# - 将服务注入(inject)另一个服务是不好的做法吗?

标签 c# service repository-pattern

<分区>

我正在创建一个按以下方式分层的 Web 应用程序:

Controller > 服务 > 存储库

因此它遵循服务和存储库模式。

假设我有 2 个实体 ProductPage,如下所示:

public class Product
{
   public string Name { get; set;}
   public Page Page { get; set; )
}

public class Page
{
   public string Name { get; set;}
}

这些实体中的每一个都有一个像这样的存储库:

public class ProductRepository
{
   public Product GetProduct(int productId)
   {
      // code
   }
}

public class PageRepository
{
   public Product GetPage(int pageId)
   {
      // code
   }
}

当然,每个存储库都有一个服务,存储库将被注入(inject)到该服务中:

public class ProductService
{
   public bool DoesProductExist (int productId)
   {
      // code
   }
}

public class PageService
{
   public bool CreatePage (int productId, PageRequest page)
   {
      // code
   }
}

我现在遇到的问题是,当调用 PageService 创建页面时,它需要检查是否存在具有给定 productId 的产品,因为如果不存在那么不应创建页面。

我有以下方法,但我不知道它们是否是最好的方法,或者是否有更好的方法

方法一

我是否应该将 ProductService 注入(inject)到 PageService 中以使用 DoesProductExist() 方法,因为代码可重用?

方法二

我是否应该将 ProductRepository 注入(inject)我的 PageService 以在 PageService 中创建我自己的 DoesProductExist() 方法(击败可重用代码的想法)

方法三

我是否应该创建一个类似 ProductPageService 的交叉服务来实现这两种服务?

如果这些都不是好的方法,请随时提出您自己的建议

最佳答案

注入(inject)只是工具。

Is injecting service into another service bad practice?

主要答案是否定的,没关系。

你要注意的是Dependencies。例如,将 BLL 服务注入(inject) DAL 会很糟糕。您需要清楚地了解层/层/模块,并划清谁使用谁的界线。

但是您的链条看起来不错。

关于c# - 将服务注入(inject)另一个服务是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56552233/

相关文章:

design-patterns - 存储库模式和开销..?

c# - 类似于语法高亮的 Resharper

c# - Excel 数据提取 - 列数据类型问题

c# - 为什么 Unity 会在此处抛出错误 CS0136 而 Visual Studio 2019 不会?

c# - c# 中是否有线程安全和通用的 IList<T>?

安卓 WSDL 网络服务 ksoap2

javascript - AngularJS:使用服务在 Controller 之间发送值不起作用

c# - 在流畅的 nHibernate 中使用通用存储库模式

java - 使用 Eclipse 启动 Web Service Explorer 时出现错误 500

asp.net - 如何从 Entity Framework 中的上下文中取消附加实体?