领域驱动设计-day7

本文探讨了领域驱动设计中的微服务设计和拆分,强调了微服务拆分应遵循的原则,包括高内聚、低耦合和单一职责等,并提及了微服务设计时需要考虑的因素。
摘要由CSDN通过智能技术生成

    通过之前的学习,对DDD从设计到开发已经有了一定的了解。DDD作为指导微服务建模的指南,讲了从战略设计 到战术设计的方法。但没有讲解微服务拆分,跟设计的原则。今天就学习下微服务拆分的原则,同时也是领域设计的最有一节。

一、微服务设计和拆分要坚持哪些原则?

微服务设计原则

微服务设计原则中,如高内聚低耦合、复用、单一职责等这些常见的设计原则在此就不赘述

了,主要强调下面这几条:
 
第一条:要领域驱动设计,而不是数据驱动设计,也不是界面驱动设计。
微服务设计首先应建立领域模型,确定逻辑和物理边界以及领域对象后,然后才开始微服务
的拆分和设计。而不是先定义数据模型和库表结构,也不是前端界面需要什么,就去调整核
心领域逻辑代码。在设计时应该将外部需求从外到内逐级消化,尽量降低对核心领域层逻辑
的影响。
 
第二条:要边界清晰的微服务,而不是泥球小单体。
微服务上线后其功能和代码也不是一成不变的。随着需求或设计变化,领域模型会迭代,微
服务的代码也会分分合合。边界清晰的微服务,可快速实现微服务代码的重组。微服务内聚
合之间的领域服务和数据库实体原则上应杜绝相互依赖。你可通过应用服务编排或者事件驱
动,实现聚合之间的解耦,以便微服务的架构演进。
第三条:要职能清晰的分层,而不是什么都放的大箩筐。
分层架构中各层职能定位清晰,且都只能与其下方的层发生依赖,也就是说只能从外层调用
内层服务,内层通过封装、组合或编排对外逐层暴露,服务粒度也由细到粗。应用层负责服
务的组合和编排,不应有太多的核心业务逻辑,领域层负责核心领域业务逻辑的实现。各层
应各司其职,职责边界不要混乱。在服务演进时,应尽量将可复用的能力向下层沉淀。
 
第四条:要做自己能 hold 住的微服务,而不是过度拆分的微服务。
微服务过度拆分必然会带来软件维护成本的上升,比如:集成成本、运维成本、监控和定位
问题的成本。企业在微服务转型过程中还需要有云计算、DevOps、自动化监控等能力,而
一般企业很难在短时间内提升这些能力,如果项目团队没有这些能力,将很难 hold 住这些
微服务。

微服务拆分需要考虑哪些因素?

1. 基于领域模型
基于领域模型进行拆分,围绕业务领域按职责单一性、功能完整性拆分。
2. 基于业务需求变化频率
识别领域模型中的业务需求变动频繁的功能,考虑业务变更频率与相关度,将业务需求变动
较高和功能相对稳定的业务进行分离。这是因为需求的经常性变动必然会导致代码的频繁修
改和版本发布,这种分离可以有效降低频繁变动的敏态业务对稳态业务的影响。
3. 基于应用性能
识别领域模型中性能压力较大的功能。因为性能要求高的功能可能会拖累其它功能,在资源
要求上也会有区别,为了避免对整体性能和资源的影响,我们可以把在性能方面有较高要求
的功能拆分出去。
4. 基于安全边界
有特殊安全要求的功能,应从领域模型中拆分独立,避免相互影响。
5. 基于技术异构等因素
领域模型中有些功能虽然在同一个业务域内,但在技术实现时可能会存在较大的差异,也就
是说领域模型内部不同的功能存在技术异构的问题。由于业务场景或者技术条件的限制,有
的可能用.NET,有的则是 Java,有的甚至大数据架构。对于这些存在技术异构的功能,可
以考虑按照技术边界进行拆分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值