本文为笔者就Robert C. Martin提出的The Clean Architecture(中文意为:整洁架构)系列文章第一篇,阐述为什么我们需要一个这样的整洁架构
为什么需要整洁架构
软件在本质上复杂的
因为,软件在本质上是复杂的
想必所有程序员都会认同这个观点,软件太复杂了。但与大多数程序员理解的可能不一致:软件的复杂度并不是因为编码语言或框架过多,更新过快等技术性原因。
在面向对象的分析与设计一书中指出了,第一个章节就非常明确的指出了为什么软件在本质上是复杂的
- 问题域的复杂性
- 管理开发过程的困难性
- 软件中随处可能出现的灵活性
- 描述离散系统行为的难处
因此,几十年的编码理念不断更新,也是不断应对软件复杂的原因。
出现了软件各种理论与方法论,比如敏捷软件开发,DDD领域驱动这些方法论的出现,以及各种新技术框架语言,如Kotlin,React,TypeScript等,都是为了应对及解决这个问题。
程序员更关注具体
从笔者多年的工作经验及与各种各样的技术人员相处来看,笔者可以得出一个的论,或者可以说至少在国内编程界这个是比较明显存在的一个现象
那就是:
一个非常常见的表现是:程序员在设计架构时,往往优先考虑的一些点是:
- 选择什么语言,比如Java,Kotlin或Scala等
- 是否选用Spring框架
- 是JPA还是Mybatis框架
- 微服务发现中心用什么框架最好
- 是用React,还是Vue
等不胜枚举的现象
当然,笔者并不是说这样的考量点有问题,但其实很明显,这些已经表现出一个趋势:就是我们更关注具体。从另一个角度来说,我们没有关注与努力解决软件的复杂性,反而把更多的精力放在具体上面,导致随着时间的发展,软件变得不断复杂。
架构中被忽略的一个重要特性: 可维护性
我们在设计或评估一个架构时,需要考量很多点:比如性能,可扩展性,稳定性,可维护性等,在这些要素中,往往性能+可扩展性,集群,缓存等一些特性更被重视与考量,而往往被非常多的程序员包括一些优秀的程序员忽略的一个重要特性是可维护性
对软件质量的评估与考量中,可维护性应该是属于最重要的一个特性。因为软件是要一直维护与更新的,你所设计与实现的软件架构不仅要满足当下,更重要的是保证其可持续的迭代与维护,满足于未来
一个现实是:程序员更喜欢做新项目,更不愿意参与到旧有的已存在的项目中,这是因为大家都清楚,已有的或旧有的软件往往开发起来更困难,一个重要原因在于其可维护性非常低
用整洁架构解决与改善这些问题
从上述笔者的分析可以明白,整洁架构是为了
- 让软件更易于应对复杂性
- 更关注于抽象与方法论而非具体语言技术框架等
- 更易于保证软件的可维护性
而我们想要成为一个真正优秀的程序员,也要让自已在关注各种新技术的同时,更关注好的方法论。