我已经看到很多书籍和文章示例都说要将验证代码放在您的服务层中。保持域对象“哑”(又名纯 POCO)并处理域对象可能在服务层中执行的所有验证。
服务层似乎(或至少可以)负责这么多;用户身份验证、角色身份验证、为 IoC 编写脚本依赖对象(记录器、错误处理程序等)、编写域对象脚本、编写存储库脚本以及将域对象传入和传出存储库……哇!
在服务层中创建所有这些规则不会对您的域对象构成重大威胁吗?例如,如果某些程序员决定直接针对您的域对象编写消费代码并完全绕过服务层,会发生什么情况?这将是糟糕的,但一个可信的情况。
如果您打算将很多职责放在服务层中,包括所有域对象验证,是否有办法“保护”您的域对象,是否有人试图直接编写脚本?例如,也许你的域对象现在没有被某个客户端使用(在这种情况下是服务层?)。
好的设计让我认为域对象不应该知道谁在调用它们以及如何调用它们。
如果没有办法“锁定”域对象,那么为什么有这么多文章、书籍等建议将域对象验证放在服务层中呢?我想通过采取防御性编程立场,您应该构建您的域对象以防弹,并依靠您的服务层来提供一个简单的代码层来在 UI 和 BAL/DAL 之间转发和接收请求。
有没有人从绕过他们的服务层的人那里“滥用”他们的域对象的一些实际项目经验?