开发者社区 问答 正文

《泰山版开发手册》关于分层领域模型规范的问题

《泰山版开发手册》【P43页:工程结构-应用分层-分层领域模型规范】

• DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
• DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
• BO(Business Object):业务对象,可以由 Service 层输出的封装业务逻辑的对象。
• Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类
来传输。
• VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
  1. 对于BO的理解不知道是否准确,BO是同业务的一个封装对象,内部可能调用了多个该业务相关的Service层方法是吗?

  2. 对于Query、VO的理解,Query是Controller层的接收查询请求对象,VO是Controller层返回的响应对象呢?但是Controller层接收Update/Add等操作时,该用什么模型去定义呢?以及模型定义规范推荐如何呢?

  3. 对于DTO的理解,DTO是Service层向外输出的传输对象,那Service层接收的请求对象建议是用什么模型定义呢?如果Service层查询请求模型也用Query,与Controller一致,是否会影响复用性呢?

展开
收起
立青王 2022-08-11 10:37:49 348 分享 版权
阿里云 AI 助理回答

BO的理解与应用

BO(Business Object)确实是一个封装了业务逻辑的对象,它通常由Service层输出。您的理解是准确的,BO内部可以包含或调用多个与该业务相关的Service方法,以实现复杂的业务逻辑处理。这样做的目的是将业务规则和数据操作聚合在一起,提供一个清晰、易于理解和维护的业务操作接口。

Query与VO的用途

  • Query对象主要设计用于接收查询请求,无论是来自Controller层还是其他需要发起查询操作的层。它的存在是为了标准化查询参数的传递,避免使用Map等非结构化方式导致的可读性和维护性问题。因此,Query不仅限于Controller层,但在Web应用中常见于该层来组织和传递查询条件给Service层。
  • **VO(View Object)**主要是为了展示层准备的数据格式,确保数据以适合视图渲染的形式呈现。确实,VO常由Controller返回给模板引擎或其他前端展示组件,封装了最终展示所需的数据结构和格式。

Controller层处理Update/Add操作的模型定义

对于Update/Add等操作,推荐使用专门的DTO(Data Transfer Object)来封装这些操作所需的参数。例如,可以创建UpdateRequestDTOAddRequestDTO,每个都精确对应其操作类型所需的数据结构。这样做能够明确区分不同操作的输入,提高代码的可读性和可维护性。

Service层请求对象的建议

Service层接收的请求对象应根据具体操作设计相应的DTO。如果查询请求模型在Service层也采用Query对象,这实际上提高了代码的一致性和复用性,只要确保Query设计得足够通用且符合各层的使用需求即可。重用Query对象作为Service层的入参并不必然降低复用性,反而可能因为遵循了DRY(Don't Repeat Yourself)原则而提升系统的整体效率和一致性。

模型定义规范推荐

  • DO:严格对应数据库表结构,保持简单直接。
  • DTO:根据交互上下文定制,关注数据传输的便捷性和安全性。
  • BO:聚焦业务逻辑,隐藏实现细节,提供高层次的业务操作接口。
  • Query:统一查询参数格式,增强可读性和易用性。
  • VO:面向视图定制,考虑展示逻辑和用户体验。

综上所述,每种对象都有其特定的职责范围,通过合理设计和分层,可以有效提升系统的模块化、可扩展性和维护性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: