一.进程内架构设计的四个重点:
灵活性:变化的隔离与传播
易懂性与开发难度:知识显式、隐式、不可言说
可测试性:问题的发现与定位
可扩展性(scalability):能否从intra改为inter
二.常见的几种架构
2.1 分层架构
灵活性
- 层与层之间看作机器抽象/接口抽象
- 通过层隔离需要传播的变化
- 需要区分分层与delegation
易懂性与开发难度
- 需要明确每一层的职责范围
- 对于组件和功能归属于哪一
- 层,是知识管理的难点
- 过多的分层造成管理困难
- 过少的分层无法隔离变化
可测试性
- 对于分层架构需要明确进程边界
- 对于边界外的系统选择有效的策略
- 保证测试有效性
- 与问题定位速度紧密相关
- 过少的层,无法有效定位问题
可扩展性(scalability):能否从intra改为inter
- 分层架构潜在可以将下一层移出当前进程
- 但是整体分区更常⻅
2.2 事件驱动架构
- 灵活性
- 功能转化为事件的消费和生产
- 数据通过事件或存储传递
- 通过事件编排以组织系统功能
易懂性与开发难度
- 模块间的调用关系转化为隐式知识,增加理解成本
- 异步的结构难以完成严格的时序控制
可测试性
- 单元测试简单,事件处理模块可以容易地被测试
- 派发逻辑也很容易测试,可以通过Stub/Spies/Mocks测试消息传递逻辑
- 组件测试容易但是功能测试困难,大量逻辑泄露到事件编排
测试有效性很难保证. 事件产生的顺序等. 好测但是不能转换为期待的编排. 测试难度增加.
- 可扩展性
- 事件处理与分发可以容易地转为inter process