Clean整洁架构与外部系统集成的验证


使用Clean清洁架构注意:请勿将系统直接连接到外部系统!需要通过适配器转换或验证:

在企业应用中,我们经常需要与第三方系统集成。例如,如果我们有一个订购系统,我们可能需要将其与企业资源规划系统和快递系统集成。在工业自动化领域,我们可能需要与传感器集成。

与第三方系统集成的可能性包括以下几种:

  • REST API
  • SOAP
  • FTP
  • SQL

验证规则
一个挑战是:在向第三方系统发送数据时,我们需要确保数据的有效性。我们必须遵守第三方系统设定的约束条件,防止向第三方系统发送不良数据。

举个例子,当我们向企业资源规划系统发送订单时,也许我们分配的订单号必须是最多 10 个字符,因为这是企业资源规划系统唯一能接受的。订单价格必须是小数,精确到小数点后 2 位,而且必须是正数。这意味着,在向外部系统发送数据之前,我们需要对这些约束条件进行验证。

反过来,我们也需要检查来自第三方系统的数据是否有效,是否满足我们指定的约束条件。

例如,从第三方系统读取数据时,我们还需要检查类型兼容性;例如,first_name 字段必须是字符串,amount 字段必须是小数,必须是正数,产品必须设置为活动。

此外,我们还可以对范围和格式进行一定的限制。

例如,字符串的长度必须介于 3 和 10 之间;电子邮件或社会保险号必须符合特定格式;值必须在某种范围内(例如,颜色必须是红色、绿色或蓝色,不接受其他字符串);整数必须介于 2 和 100 之间(下限和上限包括或不包括)。我们可以检查某些日期必须在过去或未来。

因此,总的原则是我们需要负责向外部系统发送有效数据。但另一方面,当我们从外部系统读取数据时,我们也必须非常保守--我们不应该相信来自外部的数据。

测量单位
第三方系统的另一个问题是,只要涉及到任何单位,我们就必须非常明确地告诉与我们集成的其他团队--使用的是什么单位?

例如,假设一个团队使用公制单位,而另一个团队使用英制单位。这些差异需要作为 API 合同的一部分记录在案,并有足够的适配器来处理单位转换。

正确性检查
除了这些标准的、简单的、相对简单的验证外,我们还可以使用额外的验证来进行正确性检查。

例 1:假设一架飞机的机头角度必须在 0 至 90 度或 270 至 360 度之间。任何超出该范围的值都会被解释为传感器可能出错。

例 2:我们有一个测量身高的传感器。假设我们研究了全世界人的身高,发现最矮的人是 50 厘米,最高的人是 240 厘米。在最小值和最大值上添加缓冲区后,我们就可以说,我们的高级传感器应该接受 40 厘米到 250 厘米之间的有效值,但超出这个范围的值我们就解释为传感器可能出错了。

波音公司就曾出现过这种特殊问题,例如,只有一个传感器,但它却接收到了错误的数据,而且正如所评论的那样,MCAS 没有输入限制,因此这意味着它提供了错误的输入;也许输入超出了范围或其他什么,但在撰写本文时我们还不知道。但这种情况本可以通过验证来避免。就传感器而言,最好能有冗余,即我们连接的多个传感器都能检测到传感器之间的数据差异。

总结
在处理第三方系统集成时,验证是一个非常重要的主题。我们需要验证发送给第三方系统的数据,以避免第三方系统因为我们发送了错误数据而返回错误。另一方面,我们也需要验证从第三方系统传入的数据,以确保其满足我们的限制条件。

如果我们使用的是clean整洁架构:

  • 我们就会在用例层进行一定程度的验证。
  • 我们还将在领域层中建立领域不变性,
  • 然后当我们通过基础设施向外部系统发送数据时,数据已经处于有效状态。

这只是发送一个方面。

另一方面,即接收端,是我们从第三方系统读取数据时的基础架构。
同样,我们正在从这些数据中构建域实体和值对象,因为它们具有域不变式,可以确保某些域不变式得到尊重。

banq注:通过领域事件约定上下文映射之间这种数据结构Schema是一种简单方式,缺点需要以主或上帝角度俯视掌控全局。