2009-08-23 85 views
1

它是一种很好的编码标准,允许ASP.NET MVC控制器动作直接访问存储库(即使服务层负责繁重的工作,例如LoginService.Authorize())以检索,添加或更新数据?还是应该一切通过服务,并从那里到仓库?通过服务或直接访问存储库?

回答

2

这是更好地去通过服务层(这取决于如何你虽然实现了它),因为这是它的点 - 是一个单一的接入点,因此任何具体业务,你做的事情有,是代表并在所有呼叫者中实施。

4

对于较小的应用/腹板,我倾向于不使用服务层,因为它只是映射库方法1:1,并且我松KISS。但最终,这取决于商业模式;存储库提取数据库访问权限,服务封装逻辑。

1

这实际上取决于复杂性。如果你正在处理任何transcation scoping,我肯定会将它从控制器中解耦到服务层。

0

在我看来,这取决于你的设计/建筑。仓库的目的是什么?执行CRUD操作(创建,读取,更新和删除)。

如果您在经典的三层体系结构中使用贫血域模型,则所有应用于模型的逻辑都是在服务中生成的。 在这种情况下,选择是显而易见的:您不应该直接调用存储库。 为什么?由于你的模型很傻,逻辑在服务中,你可能会创建无效模型。如果您可以调用存储库,则可以在数据库中创建/更新无效模型。如果你打电话给服务,它应该能够在创建/更新它之前正确填充你的模型。

如果您在洋葱式架构中使用丰富域模型,则它不同。因为你的模型应该总是有效的(当你从构造函数或者工厂创建一个时,所有的验证都被执行了,当你更新一个时它是一样的),你可以没有任何问题直接调用存储库。 在这种情况下,所有逻辑直接在模型中,服务仅用于存储不属于特定模型的逻辑。

现在的问题不是“如何使用资料库”,而是“我需要什么样的设计/建筑?”第一个问题将被回答:-)