云时代架构读后感11--架构层级的开闭原则

原文地址:https://mp.weixin.qq.com/s?__biz=MzAwNTQ4MTQ4NQ==&mid=2453562533&idx=1&sn=d45990a6f1e9b9b6079603a523bb26bb&chksm=8cd131c7bba6b8d14925ee9ef431690c2a1a142993dd6651947c76ec5061faa6cd59a72ae71c&mpshare=1&scene=23&srcid=#rd

在类的层级,开闭原则(the-Open-Closed-Principle,简称OCP原则)的含义是:一个类对扩展是“开”放的,而对变更是封“闭”的,意思是说,应该在不改变类的前提下扩展一个类的行为。而通常的方式是继承和多态。

在架构层级,我们并不会变更系统的一部分功能(可能是最适用于当前架构的进程,守护进程,服务,或者微服务),而是通过新增功能的方式来复用已完成的代码。为了不对现有的部分做出变更,系统需要做到完全的解耦。接下来的内容将聚焦于事件驱动系统,并以消息队列实现服务间通信。

消息队列 可以是ActiveMQ, RabbitMQ, ZeroMQ, Kafka或者其他服务,本文将以Kafka的话语体系来进行描述,如主题(Topic),发布者,订阅者,以及类似Kafka的多个订阅者共享相同主题的能力。

迪米特法则

迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简称LKP),就是说一个对象应当对其他对象有尽可能少的了解。

消息是如何构成的?消息的必要内容是什么?

为了回答这些问题,我们首先需要了解消息类型和目标的差异。首先,消息表征了事件,而事件即事实,代表已经发生的事情。我们在既往的时间定义了事件,这些事件代表已经发生过的事情,我们无法改变既成事实。我们在Topic中存储事件的时候,以事件为Topic命名。

事件的目标又是什么呢?我所知道的两种类型事件的目标是这样的:

表征事实

建立数据流

1、事件驱动系统给了我们很好的机会来在架构层级应用开闭原则。我们可以重用已有的代码,并且在未知的方向上实现功能的扩展。

2、然而,需要谨慎的设计事件的内容,同时警惕糟糕的设计可能引入的耦合的可能性。

3、要根据系统的目标来指导架构设计,为某一目标设计某种适用的架构(如,为大数据系统设计的流式数据)很可能对于另一目标来说是糟糕的设计(不适用于表征事实发生的事件驱动系统)。

4、领域驱动设计的有界上下文可以为事件内容的设计提供一些指导。

5、架构是关于决策和权衡,最大化应用开闭原则很可能意味着对“迪米特法则”的最小化遵循,必须谨小慎微地寻找一个平衡点。

 

posted @ 2019-05-18 16:40  但为君故。  阅读(191)  评论(0)    收藏  举报