10.7 作业
根据微服务框架 Dubbo 的架构图,画出 Dubbo 进行一次微服务调用的时序图。
解析:
2.关于微服务架构(中台架构、领域驱动设计、组件设计原则),你有什么样的思考和认识?
解析:
微服务架构,核心是服务本身,微服务框架是技术手段。
微服务架构核心:服务本身的设计
服务设计思路:战略设计: 划分业务领域及其边界,确定领域之间的依赖关系。
战术设计:领域模型设计。
即DDD领域驱动设计方法论。
DDD战略设计:逻辑上划分业务领域,物理上限定领域边界,以及确定领域之间的关系。
DDD战略设计策略:分而治之策略。分解复杂问题,为多个简单问题,降低复杂度。
DDD战略设计方法:主要方法:子域,限界上下文,上下文映射图。
子域:划分业务领域。比如:电商系统,划分子域:产品目录子域,订单子域,支付子域,发票子域,物流子域,用户子域,卖家子域等。比如:AOIS,划分子域:用户子域,患者子域,诊断子域,定位子域,计划子域,治疗子域。
限界上下文:限定子域的边界。子域是从逻辑上划分的,逻辑子域的边界通过限界上下文确定。物理上可部署为独立的组件。
上下文映射图:不同限界上下文之间,即不同模块或者子系统之间有互操作,通过上下文映射图可以设计这种交互。
DDD战术设计:核心在于建立领域模型,统一业务逻辑。
DDD战术设计方法:实体,值对象,聚合等。
实体:即领域模型对象。有唯一标识。且标识不变。但是实体状态可能发生变化,可能变化多次。
实体设计是DDD领域驱动设计的核心所在。首先要通过业务分析,识别出实体对象,然后通过相关的业务逻辑, 设计实体的属性和方法。最重要的是,把握实体的特征,应该承担什么职责,不应该承担什么职责,分析的时候要放在业务场景和衔接上下文中。
值对象:用来度量或者描述的对象,可以设计为值对象。值对象的特点不变性。
例如:电话号码,变更后,将是一个全新的电话号码,应当设计为值对象。
聚合:关联对象的集合,可视为一个单元来处理数据更新。聚合有根和边界。
聚合根:多个实体和值对象聚合在一起的实体。
组件设计原则:高内聚,低耦合。
组件内聚原则:目的:聚合那些类在同一个组件中,提供相对完整的功能,又不至于太过庞大。复用发布等同原则,共同封闭原则,共同复用原则。
复用发布等同原则:软件复用的最小粒度等同与其发布的最小粒度。组件是软件复用和发布东最小粒度软件单元。组件既是复用的粒度,又是发布的粒度。比如:AOIS系统组件:诊断组件,定位组件,计划组件,治疗组件等业务组件。
共同封闭原则:为了相同目的而修改的类,被共同封闭在同一个组件中。非相同目的或者不会同时修改的类,放到不同的组件中。如果组件在生命周期中不断变更,那么该组件最好独立,其变更限定在组件内部,不应该涉及到其他组件,当变更发生时,只需要更新该组件
共同复用原则:相互依赖,共同复用的类放在一个组件中。不被共用后者不被依赖的类,放到不同的组件中。避免不被依赖的类发生变更,引起组件变更,甚至引发程序变更。
组件耦合原则:组件之间的关系设计。无循环依赖原则,稳定依赖原则,稳定抽象原则。
无循环依赖原则:组件之间的依赖关系,不应该出现环。
稳定依赖原则:组件依赖关系应该指向更稳定的方向。
通常,较少变更的组件是稳定的。不稳定组件应该依赖稳定组件。
稳定抽象原则:组件的抽象化程度与其稳定性程度是一致的。稳定组件是抽象的。不稳定组件是具体的。
评论