《泰山版开发手册》【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内部可以包含或调用多个与该业务相关的Service方法,以实现复杂的业务逻辑处理。这样做的目的是将业务规则和数据操作聚合在一起,提供一个清晰、易于理解和维护的业务操作接口。
对于Update/Add等操作,推荐使用专门的DTO(Data Transfer Object)来封装这些操作所需的参数。例如,可以创建UpdateRequestDTO
和AddRequestDTO
,每个都精确对应其操作类型所需的数据结构。这样做能够明确区分不同操作的输入,提高代码的可读性和可维护性。
Service层接收的请求对象应根据具体操作设计相应的DTO。如果查询请求模型在Service层也采用Query对象,这实际上提高了代码的一致性和复用性,只要确保Query设计得足够通用且符合各层的使用需求即可。重用Query对象作为Service层的入参并不必然降低复用性,反而可能因为遵循了DRY(Don't Repeat Yourself)原则而提升系统的整体效率和一致性。
综上所述,每种对象都有其特定的职责范围,通过合理设计和分层,可以有效提升系统的模块化、可扩展性和维护性。