我一直在阅读很多关于存储库模式和服务层的角色,我(我认为)非常了解这两者之间的区别。但是现在一个简单的问题让我挠了脑袋。存储库,服务层和方法放置
我知道了数据访问层是如何负责嗯......存取数据,这样一个典型的仓库可以有这样的插入,更新,删除方法,并保存(基本CRUD方法)。服务层包含所有的业务资料,验证,发送电子邮件和所有爵士乐,我读的一件事是服务层不应该重复存储库方法,因为此设置不会增加任何价值。
但我的问题是'add'方法。假设我有一个供应商类别,我想将一个特定供应商添加到我的供应商列表中。用户通过UI(MVC Web应用程序)输入供应商信息,并调用控制器方法。
现在控制器应该怎么处理才能坚持这个供应商?
- 的仓库直接
- 服务层
由于纯仓库实现将不会做任何事情比坚持实体,如果我有一些验证和/或业务规则,我应该使用服务层明显。但是,如果我不应该控制器直接处理存储库?在我看来,这似乎打破了建筑的分层性质。控制器正在跳过服务层并与持久层通话。
比方说,我想在安全方面和使用的服务层(因为我有可能验证以及涉及到与供应商其他的东西)。我将结束:
- 的AddSupplier方法
- 的UpdateSupplier方法
- 一个DeleteSupplier方法
这是我没有在第一时间想,因为我现在有什么与服务层和数据访问层进行1:1映射。
所以,我对你的问题是:在什么地方(加入|更新|删除)供应商的方法应该去?
而且,是OK绕过服务层和直接对话,从控制器存储库层?
是的你是对的。由于我问了这个问题,我也学会了所用语言的重要性。是的,我需要'添加供应商'给我系统,但是在现实世界中,您不'添加'供应商,而是雇用一个。所以'AddSupplier'变成'HireSupplier'。 'DeleteSupplier'变成了'FireSupplier'。唯一需要通过id获得供应商的方法是更加不以商业为导向的方法。由于我不想在一半的时间使用存储库和服务,另一半我添加了一个'GetSupplierById'方法,并不是那么糟糕。 – 2012-08-21 15:23:10