戏说领域驱动设计(十九)——外验,如何深入理解其核心概念?

2026-05-19 17:330阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计4516个文字,预计阅读时间需要19分钟。

戏说领域驱动设计(十九)——外验,如何深入理解其核心概念?

内验是对领域模型自身进行的验证,其验证规则也由领域模型自动完成,只是发展的时机可能在不同。与内验相对应的自然就是外验,这是用于对用户的输入和输出进行验证。

  内验是针对领域模型自身的验证,其验证规则也是由领域模型自已来完成,只是触发的时机可能在工厂中也可能在构造函数中。与内验对应的当然就是外验了,这是用于对用户的输入和业务流程的前提或得更专业一点叫“前置条件”的检验。如果细化一点,可以将外验分成两个情况:用户输入和业务流程的前置条件。情况不同验证的方式也不一样,下面让我们展开了细聊。对了,额外多说一句,此处的“内验”和“外验”是我为了说明问题所起的名称,其实叫什么您只要能和团队成员说明白就行,名字并不是很重要。

一、基于外部输入的验证

  对外部的输入进行验证其实很简单,有多种现成的手段可用比如SpringBoot里的类库“hibernate-validator”,引入后直接使用即可。这种验证方式仅限于视图模型或简单类型,不建议在领域模型中也进行使用,会造成BO与基础设施的强绑定,看过前面内容的您应该知道,减少对基础设施的依赖是六边型架构的典型特征。回到正题,我个人在面对外部输入的时候,如果是视图模型,便在模型中直接嵌入验证代码;如果是简单类型,则将验证的逻辑交付地一个验证工具进行。这样做的好处是业务逻辑中的代码量比较少,看起来干净;另外就是由于工具是可以复用的,所以减少的代码量总的算起来还是不少的,毕竟验证是一个刚需。熟悉本系列文章的老朋友应该发现我提到了很多次的“代码干净、整洁”,这个并非是可有可无的要求,而是应当在开发过程中随时要注意的。在满足需求的同时有效代码越少系统可维护性越高;涉及到工作交接或增加人手等相关工作,这些在IT团队中非常常见的情况本来成本是不低的,但如果能在代码书写度方面给予重视,成本是可以降下来的。

阅读全文

本文共计4516个文字,预计阅读时间需要19分钟。

戏说领域驱动设计(十九)——外验,如何深入理解其核心概念?

内验是对领域模型自身进行的验证,其验证规则也由领域模型自动完成,只是发展的时机可能在不同。与内验相对应的自然就是外验,这是用于对用户的输入和输出进行验证。

  内验是针对领域模型自身的验证,其验证规则也是由领域模型自已来完成,只是触发的时机可能在工厂中也可能在构造函数中。与内验对应的当然就是外验了,这是用于对用户的输入和业务流程的前提或得更专业一点叫“前置条件”的检验。如果细化一点,可以将外验分成两个情况:用户输入和业务流程的前置条件。情况不同验证的方式也不一样,下面让我们展开了细聊。对了,额外多说一句,此处的“内验”和“外验”是我为了说明问题所起的名称,其实叫什么您只要能和团队成员说明白就行,名字并不是很重要。

一、基于外部输入的验证

  对外部的输入进行验证其实很简单,有多种现成的手段可用比如SpringBoot里的类库“hibernate-validator”,引入后直接使用即可。这种验证方式仅限于视图模型或简单类型,不建议在领域模型中也进行使用,会造成BO与基础设施的强绑定,看过前面内容的您应该知道,减少对基础设施的依赖是六边型架构的典型特征。回到正题,我个人在面对外部输入的时候,如果是视图模型,便在模型中直接嵌入验证代码;如果是简单类型,则将验证的逻辑交付地一个验证工具进行。这样做的好处是业务逻辑中的代码量比较少,看起来干净;另外就是由于工具是可以复用的,所以减少的代码量总的算起来还是不少的,毕竟验证是一个刚需。熟悉本系列文章的老朋友应该发现我提到了很多次的“代码干净、整洁”,这个并非是可有可无的要求,而是应当在开发过程中随时要注意的。在满足需求的同时有效代码越少系统可维护性越高;涉及到工作交接或增加人手等相关工作,这些在IT团队中非常常见的情况本来成本是不低的,但如果能在代码书写度方面给予重视,成本是可以降下来的。

阅读全文