当涉及微服务时,服务的开发生命周期也应该是独立的。*
不同的SLDC和不同的开发团队
在实际的MS系统中,可能有多个团队参与生态系统的开发,每个团队负责一项或多项服务。反过来,这些团队可能位于不同的办公室,城市,国家/地区,计划……也许,他们甚至彼此都不认识,这使得共享知识或代码变得非常困难(如果可能)。但这可能非常方便,因为共享代码还暗含一种共享推理,并且需要记住的重要一点是,对于特定团队而言,有意义的是,不必为另一个团队使用。例如,给定DTO Customer,根据所使用的服务,它可能会有所不同,因为对客户的解释(或看到)与每种服务不同。
不同的需求,不同的技术
隔离的SLDC还允许团队选择最适合其需求的堆栈。强加于特定技术中的DTO限制了团队的选择能力。
DTO既不是业务规则也不是服务合同
真正的DTO是什么?普通对象没有其他目标,只能将数据从一侧移动到另一侧。吸气剂和装袋机袋。总体而言,这不是值得重复使用的“知识”,因为根本没有知识。它们的波动性也使它们不适合耦合。
与Dherik所说的相反,服务必须有可能更改其DTO,而不必同时更改其他服务。服务应该是宽容的读者,宽容的作家和不能容忍的。否则,它们将导致耦合,从而使服务体系结构变得毫无意义。再一次,与Dherik的回答相反,如果三个服务需要完全相同的DTO,则在服务分解期间可能出了点问题。
不同的业务,不同的解释
虽然服务之间可能存在(并且将会有)跨领域的概念,但这并不意味着我们必须强加规范的模型来强制所有服务以相同的方式解释它们。
案例分析
假设我们公司有三个部门,即客户服务,销售和运输部门。说每个发行一个或多个服务。
客户服务由于其领域语言而围绕客户的概念(客户是人)实施服务。例如,客户被建模为姓名,姓氏,年龄,性别,电子邮件,电话等。
现在说,“ 销售和运输”也根据它们各自的域语言对服务进行建模。在这些语言中,概念客户也出现了,但有细微的差别。对他们而言,客户 不是(不一定)人。对于 销售,客户有一个文件号码一个信用卡及账单地址,为航运一个全名和送货地址了。
如果我们强迫销售和运输部门采用客户服务的规范数据模型,那么我们将迫使他们处理不必要的数据,如果他们必须维护整体表示并使客户数据与客户服务保持同步,则最终可能导致不必要的复杂性。。
相关链接
*这是此架构的优势所在
proto
gRPC 的文件或avro
Kafka 的架构并在两个服务中生成DTO,但是我不会在两个项目之间共享共享库。