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