在使用存储库和服务模式的应用程序中,如何确保始终调用服务层,而不是直接调用存储库?存储库/服务模式和数据一致性
例子:
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”而不是'CreateOrder'代替'OrderRepository'是一种方法。换句话说: – 2012-04-26 20:32:44