定义
首先我们对复杂的系统下一个定义,复杂度越高的系统就是越混乱越难以维护的系统。同样复杂度是一个相对的概念,当系统中元素非常少时,想降低复杂度是十分简单的,而当一个系统本身元素及场景就非常多且复杂时,降低复杂度才是我们的挑战所在。
物理学中有熵增定律:一个系统处于孤立状态下,没有外力介入时,最终将达到熵的最大状态,即最混乱无序的状态。
这个定律适用于所有的物理学系统,而同样也适用于计算机软件系统。
我见到过很多系统,没有设计规范约束,没有发展方向指引,代码没有质量把关。 逐步就会发展为不可维护的状态,而后期维护的人对此怨声载道,却又无能为力,只能在一堆垃圾代码上面继续叠加垃圾。此时系统的熵无疑已经到了非常大的状态,即是非常混乱的状态。
方法
千呼万唤始出来,我们到底要如何降低系统的复杂度呢?本质思想如上所述,需要加入外力的干预,最好是强力的干预。而这个外力我认为就是架构设计思想和架构解耦工具。
从整体设计角度
1.架构分层
我认为分层几乎是系统设计中最重要的思想,可以参考计算机网络协议和计算机缓存设计等。
2.领域拆分
良好的领域拆分需要依赖系统设计人员对系统应用场景的深刻理解。且具备很好的抽象能力。
3.服务聚合
同拆分一样,找到同类的功能进行聚合,也是需要对场景的理解,且需要不断优化和尝试。
4.高度自治
系统拆分与聚合清晰后,需要独立模块有高度自治的能力。对外定义控制输入和输出协议,对内实现独立且明确的能力。
5.链路简单清晰
系统链路一定要简化,尤其系统核心链路。简单意味着好理解、易维护、稳定性强、容易扩展。
解耦工具-主要指常用的代码设计方法
1.事件消息机制
2.策略、责任链等设计模式
3.规则引擎
4.状态机
5.DDD 模式
6.流程拆分与编排
最后
最后,还是借用鲁迅的话,要设计一个理论上最优的架构并不难,难的是设计一个各种条件牵制下的一个“正正好好”的架构。
复杂度问题也是一样,当外力过度干涉,复杂的设计过多时,会让系统的开发人员难以理解和上手。学习成本和维护成本可能同样会很高。
网友评论