识别应用中的“名词”或业务能力划分服务边界和识别应用中的“动词”或业务用例划分服务边界,都是按功能划分服务的方法。这种方法很有效,但是也存在一些弊端。按功能分解倾向于满足应用的当前需要,并不会明确考虑应用会如何演进。纯粹地按功能划分会导致服务在面对新的需求或者需求发生变化时不够灵活,进而增大修改的风险,最终限制系统未来的发展。
除了考虑系统的功能,还应该考虑应用未来可能发生的变化。这也被称为易变性。将很可能变化的部分封装起来,有助于确保领域内的不确定性因素不会对其他领域产生消极影响。
SimpleBank公司的业务领域存在许多维度的易变性。比如,向市场下单是易变的:不同类型的订单需要提交到不同的市场中;SimpleBank为每个市场要调用不同的API(比如,通过第三方代理商交互或者直接与交易中心交互);随着SimpleBank提供的金融资产的范围扩大,这些市场也可能发生变化。
将与市场交互的功能作为服务的一部分会增加系统的耦合度,并极大提高系统的不稳定性。反之,我们可以将市场服务进行拆分,最终开发多个服务来满足不同市场的需要。
SimpleBank公司与不同的金融市场服务提供方之间的通信方式的变化封装在market服务内部,随着时间的推移,它可能变成多个不同的服务。
摘取自 摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》
网友评论