0

在使用存储库和服务模式的应用程序中,如何确保始终调用服务层而不是直接调用存储库?

例子 :

class OrderRepository
{
    void CreateOrder(Order o)
    ...
}

class OrderService
{
    void CreateOrder(Order o)
    {
        //make some business logic tests
        ... 

        //call repository
        _orderRepository.CreateOrder(o);
    }
}

我看到两个问题:

  • 程序员可能会直接调用存储库,因为它不知道服务的存在(有时它不像本示例中那样简单(1 个服务 = 1 个具有相同方法名称的存储库)。某些应用程序没有很好的文档记录。或者有人赶时间可以忘记检查对应的服务是否存在(错误)。

  • 完全不同:很久以前有人创建了一些直接使用订单存储库的视图+控制器。那时不需要做一些业务逻辑检查或额外的操作,只有订单库存在(因为那里根本不需要)。如果稍后在创建订单时需要一些额外的操作,则会创建一个服务。问题是所有调用旧存储库的控制器都需要更改。存储库原则/想法(以及分层代码)是否应该使各个部分相互独立?

4

2 回答 2

1

静态分析工具可以在这方面提供帮助。

nDepend是一个商业工具,可以集成到您的构建过程中,并在这种情况下出错(任何非服务类直接调用存储库类)。

于 2012-04-26T19:38:34.230 回答
1

您可以构建您的解决方案,以便所有存储库和服务都在各自的项目中,例如。RepositoriesServices

唯一应该参考的项目RepositoriesServices. 这样,其他项目将无法访问存储库。当然,没有什么可以阻止开发人员将存储库项目包含到控制器项目中,但希望此时他们会问自己为什么不首先包含它。

于 2012-04-26T19:47:30.263 回答