KTO*_*TOV 6 c# service repository-pattern
我正在创建一个按以下方式分层的 Web 应用程序:
控制器 > 服务 > 存储库
所以它遵循服务和存储库模式。
假设我有 2 个实体Product,Page就像这样:
public class Product
{
public string Name { get; set;}
public Page Page { get; set; )
}
public class Page
{
public string Name { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这些实体中的每一个都有一个存储库,如下所示:
public class ProductRepository
{
public Product GetProduct(int productId)
{
// code
}
}
public class PageRepository
{
public Product GetPage(int pageId)
{
// code
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这些存储库中的每一个都有一个服务,存储库将被注入:
public class ProductService
{
public bool DoesProductExist (int productId)
{
// code
}
}
public class PageService
{
public bool CreatePage (int productId, PageRequest page)
{
// code
}
}
Run Code Online (Sandbox Code Playgroud)
我现在遇到的问题是,在调用PageService来创建页面时,它需要检查给定的产品是否存在,productId因为如果不存在,则不应创建页面。
我有以下方法,但我不知道它们是最好的方法还是有更好的方法
方法一
我应该注入ProductService到PageService使用DoesProductExist()的方法,因为可重用的代码?
方法二
我应该注入ProductRepository到我PageService,使我自己的DoesProductExist()方法PageService(击败的可重用代码的想法)
方法三
我应该创建一个类似的跨服务ProductPageService来实现这两种服务吗?
如果这些都不是好方法,那么请随时提出您自己的建议
注射只是工具。
将服务注入另一个服务是不好的做法吗?
主要答案是否定的,那很好。
你应该注意的是依赖关系。例如,将 BLL 服务注入 DAL 会很糟糕。您需要清楚地了解层/层/模块,并划清谁使用谁的界限。
但是你的链条看起来不错。
按原样,方法 1 会在您的服务之间创建依赖关系。
方法 2 在服务之间混合存储库并不是一个好的做法。