我已经阅读了很多关于存储库模式和服务层的作用的文章,并且我(我认为)很清楚两者之间的区别。但是一个简单的问题现在让我摸不着头脑。
我知道数据访问层如何负责...访问数据,因此典型的存储库可能具有插入、更新、删除和保存等方法(基本的 CRUD 方法)。服务层包含所有业务内容、验证、发送电子邮件和所有爵士乐,我读到的一件事是服务层不应该重复存储库方法,因为这种设置不会增加任何价值。
但我的问题在于“添加”方法。假设我有一个供应商类,我想将特定供应商添加到我的供应商列表中。用户通过 UI(MVC Web 应用程序)输入供应商信息,然后Create
调用控制器方法。
现在控制器应该如何处理才能持久化这个供应商?
- 直接存储库
- 服务层
由于纯存储库实现除了持久化实体之外不会做任何其他事情,如果我有一些验证和/或业务规则,我显然应该使用服务层。但是如果我不应该控制器直接处理存储库?在我看来,这似乎打破了架构的分层性质。控制器正在跳过服务层并与持久层对话。
假设我想安全起见并使用服务层(因为我可能有验证和其他与供应商打交道相关的东西)。我最终会得到:
- AddSupplier 方法
- 一个 UpdateSupplier 方法
- DeleteSupplier 方法
这是我一开始不想要的,因为现在我有一个与服务层和数据访问层的一对一方法映射。
所以我的问题是:(添加 | 更新 | 删除)供应商方法应该去哪里?
另外,是否可以绕过服务层并从控制器直接与存储库层对话?