2012-10-12 12 views
1

将业务逻辑从控制器中排除是常识。数据库访问逻辑应该使用存储库模式存储在存储库中也是常识,如下所述:Repository Pattern关于MVC中的模式3

但是,存储库模式仅指定非常简单的低级别数据库操作:插入,删除,更新,选择。人们建议保留验证逻辑。这不是问题,因为大多数验证都可以放在模型对象本身中。问题出现在我们需要进行某种交叉验证时,也就是需要查看同一模型对象的多个实例的验证(例如,确保名称在所有同一对象的实例中是唯一的),更糟糕的是,验证逻辑需要检查两个或更多不同类型的对象。在这种情况下,我们有一个真正的大洞:业务逻辑不能在控制器中,不能在存储库中,不能在对象模型本身中(因为逻辑不仅仅限于对象的属性)。这个逻辑应该在哪里?这种要求的最佳设计模式是什么?

回答

0

这里的问题是,您的设计需要的UI基于商业考虑做验证。

完成此操作的方法是将验证抽象为业务层。您的业​​务层可能有像ValidateUserIsUnique()这样的方法,然后您的用户界面调用此层并接收结果,然后将结果用于验证。

特别是,对于客户端验证,MVC提供RemoteValidationAttribute,但这只会做客户端验证。您还需要执行服务器端验证,以在服务器上调用相同(或类似)的功能。