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