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