开发者社区 问答 正文

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

《泰山版开发手册》【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:34:05 375 分享 版权
阿里云 AI 助理回答

BO(Business Object)的理解

您的理解基本准确。BO(Business Object)是业务对象,它封装了特定业务逻辑,可以整合多个Service层方法的调用结果,以提供一个更高层次、面向业务的接口给上层使用。这意味着BO不仅传递数据,还可能包含业务规则处理,比如事务管理、权限控制等。

Query与VO的理解

  • Query:确实常用于接收查询请求,包括Controller层从外部接收查询参数时使用。它的设计旨在清晰地表达查询条件,避免直接使用Map等非结构化方式传递多个参数,提高代码可读性和维护性。
  • VO(View Object):主要用途是在Controller层向模板渲染引擎或前端响应时,提供符合视图展示需求的数据格式。这确保了数据在展示前已经过适当的转换和格式化。

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

对于Update/Add等操作,推荐使用专门的Command对象或者直接利用DTO进行设计。Command对象专注于承载执行操作所需的全部数据和指令,明确表示出要执行的操作意图,如UserUpdateCommandOrderAddCommand等。这样设计有利于清晰分离命令(动作)与数据,增强代码的自解释性,并便于扩展和维护。

Service层请求对象的建议

Service层接收的请求对象,理想情况下应根据具体场景定制。如果查询请求模型简单且复用度高,可以考虑在Service层也使用Query对象,但这要求Query设计得足够通用且灵活。另一种做法是为不同的业务场景定义专门的DTO(如ServiceInputDTO),这样能更精确地匹配服务的需求,提高代码的针对性和可维护性,尽管可能会牺牲一定的代码复用性。

模型定义规范推荐

  • DO:严格对应数据库表结构,保持数据映射的直观性。
  • DTO:设计时需考虑传输上下文,精简字段,满足不同层级间数据交换的最小必要性。
  • BO:强调业务逻辑封装,提升模块间的解耦和重用。
  • Query/Command:明确区分查询和操作指令,优化参数组织,提升API的易用性和安全性。
  • VO:关注展示逻辑,适配前端需求,进行必要的数据转换和格式化。

综上所述,模型的选择和设计应遵循单一职责原则,确保各层之间职责清晰,同时也要兼顾代码的可读性、可维护性和复用性。

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