我正在创建通过以下方式分层的Web应用程序:
Controller> Service>存储库
因此,它遵循服务和存储库模式。
假设我有2个实体Product
和Page
,如下所示:
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
}
}
当然,这些存储库中的每一个都有一项服务,存储库将注入该服务:
public class ProductService
{
public bool DoesProductExist (int productId)
{
// code
}
}
public class PageService
{
public bool CreatePage (int productId, PageRequest page)
{
// code
}
}
我现在遇到的问题是,调用PageService
创建页面时,它需要检查给定的productId
是否存在某种产品,因为如果不存在,则该页面不应该被创建。
我有以下方法,但我不知道它们是最好的方法还是有更好的方法
方法1
由于可重用的代码,我是否应该将ProductService
注入PageService
以使用DoesProductExist()
方法?
方法2
我应该将ProductRepository
注入我的PageService
中以在DoesProductExist()
中创建自己的PageService
方法(击败可重用代码的想法)
方法3
我是否应该创建像ProductPageService
这样的交叉服务来实现这两种服务?
如果这些方法都不是好的方法,请随时提出自己的建议
答案 0 :(得分:1)
注入只是工具。
将服务注入另一种服务不良做法吗?
主要回答是“否”,这很好。
您应注意的是依赖项。例如,将BLL服务注入DAL太糟糕了。您需要清楚地了解层/层/模块,并划定谁使用谁的路线。
但是您的链条看起来不错。
答案 1 :(得分:0)
方法1不变,它将在您的服务之间创建依赖关系。
方法2,在服务之间混合存储库不是一个好习惯。