《泰山版开发手册》【P43页:工程结构-应用分层-分层领域模型规范】
• DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
• DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
• BO(Business Object):业务对象,可以由 Service 层输出的封装业务逻辑的对象。
• Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类
来传输。
• VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
对于BO的理解不知道是否准确,BO是同业务的一个封装对象,内部可能调用了多个该业务相关的Service层方法是吗?
对于Query、VO的理解,Query是Controller层的接收查询请求对象,VO是Controller层返回的响应对象呢?但是Controller层接收Update/Add等操作时,该用什么模型去定义呢?以及模型定义规范推荐如何呢?
对于DTO的理解,DTO是Service层向外输出的传输对象,那Service层接收的请求对象建议是用什么模型定义呢?如果Service层查询请求模型也用Query,与Controller一致,是否会影响复用性呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您的理解基本准确。BO(Business Object)是业务对象,它封装了特定业务逻辑,可以整合多个Service层方法的调用结果,以提供一个更高层次、面向业务的接口给上层使用。这意味着BO不仅传递数据,还可能包含业务规则处理,比如事务管理、权限控制等。
对于Update/Add等操作,推荐使用专门的Command对象或者直接利用DTO进行设计。Command对象专注于承载执行操作所需的全部数据和指令,明确表示出要执行的操作意图,如UserUpdateCommand
、OrderAddCommand
等。这样设计有利于清晰分离命令(动作)与数据,增强代码的自解释性,并便于扩展和维护。
Service层接收的请求对象,理想情况下应根据具体场景定制。如果查询请求模型简单且复用度高,可以考虑在Service层也使用Query对象,但这要求Query设计得足够通用且灵活。另一种做法是为不同的业务场景定义专门的DTO(如ServiceInputDTO
),这样能更精确地匹配服务的需求,提高代码的针对性和可维护性,尽管可能会牺牲一定的代码复用性。
综上所述,模型的选择和设计应遵循单一职责原则,确保各层之间职责清晰,同时也要兼顾代码的可读性、可维护性和复用性。