【发布时间】:2012-05-07 14:01:40
【问题描述】:
在使用存储库和服务模式的应用程序中,如何确保始终调用服务层而不是直接调用存储库?
例子:
class OrderRepository
{
void CreateOrder(Order o)
...
}
class OrderService
{
void CreateOrder(Order o)
{
//make some business logic tests
...
//call repository
_orderRepository.CreateOrder(o);
}
}
我看到两个问题:
程序员可以直接调用存储库,因为它不知道服务的存在(有时它不像本示例中那样简单(1 个服务 = 1 个具有相同方法名称的存储库)。有些应用程序不知道非常有据可查。否则赶时间的人可能会忘记检查是否存在相应的服务(错误)。
完全不同:很久以前,有人创建了一些直接使用订单存储库的视图 + 控制器。那时不需要做一些业务逻辑检查或额外的操作,只有订单库存在(因为那里根本不需要)。如果以后在创建订单时需要一些额外的操作,就会创建一个服务。问题是所有调用旧存储库的控制器都需要更改。存储库原则/想法(以及分层代码)不应该使各个部分相互独立吗?
【问题讨论】:
-
"...应该让各个部分相互独立?"这是一种误解。它旨在使职责彼此独立。
OrderRepository仍然负责从数据库中获取数据并将数据保存到数据库中,OrderService负责应用管理订单的逻辑。尝试通过改进方法名称来使这些职责更加清晰。SaveOrder而不是CreateOrderforOrderRepository是一种方法。
标签: c# model-view-controller oop repository-pattern