你可以像设计建筑一样设计软件架构
1.jpeg
通过分析架构的起源,我们知道在软件架构诞生之前,架构一词,更多是应用在建筑设计领域中。
古代工匠或是“工程师”在开始工程设计前,其最重要的任务之一就是进行工程架构设计,确定布局、选景等,以保证建筑设计的合理。
古罗马御用工程师、建筑师马可·维特鲁威(Marcus Vitruvius Pollio),最早提出了建筑的三要素:
实用、坚固、美观
从实际角度出发,这三者其实并无绝对的前后优先级关系。实用是说,建筑应该按照不同的形态满足其不同的功能要求;坚固是指建筑选址应该尽量规避天灾人祸多发地带,布局应该符合当地环境,不应因为建筑而破坏生态环境,也应避免因为不利的环境因素导致建筑的破坏;而美观更加强调建筑与周围环境的协调性。
贝聿铭曾说过:
我和我的建筑都像竹子,再大风也只是弯弯腰而已。
屏幕快照 2018-11-21 09.08.49.png
而建筑设计的三要素同样也适用于软件架构设计。
从实用角度来看,优秀的软件架构不应该进行过度设计,如果设计复杂度较高,应考虑软件维护者是否能接受这样的架构设计,以及其可能带来的长期维护成本;软件架构设计亦应坚固可靠,其可以应对内外界多种不同类型的攻击,提供可靠准确的输出,面对外界的变化上,应响应迅速及时,灵活可扩展;同样地,软软件架构也应该具备美观性,整洁代码易于阅读,更易于维护,能使得维护者从直观上对功能产生更清晰的认识,和更快速的处理变化。
《整洁代码之道》一书中曾提起代码整洁的优势:
代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。
2.jpeg
所以,进行一款优秀的软件架构设计,亦是进行一个优秀的建筑架构设计。
路易.康在《静谧与光明》中曾经提到:
一座伟大的建筑物,按我的看法,必须从无可量度的状况开始,当它被设计着的时候又必须通过所有可以量度的手段,最后又一定是无可量度的。建筑房屋的唯一途径,也就是使建筑物呈现眼前的唯一途径,是通过可量度的手段。你必须服从自然法则。一定量的砖,施工方法以及工程技术均在必须之列。到最后,建筑物成了生活的一部分,它发生出不可量度的气质,焕发出活生生的精神。
建筑架构设计关注“环境”,软件架构设计关注“变化”。
任何建筑的存在都依赖于它所处的环境,其中包括人为环境和自然环境。所谓“水能载舟,亦能覆舟”,建筑所处的环境不仅是其存进因素,也是其制约条件,合理把握能达到出其不意的效果,把握不当也会带来不可预计的损失。
软件架构设计更多也是为了可能的“变化”所服务。在较恶劣的“变化“到来之时,维护者们为了快速交付任务,会随意堆积代码,代码交付就像马拉松随后的冲刺,临近极限就像博尔特短跑冲刺,肆意堆积代码,任由病毒滋生,从而产生一个难以理解的软件系统,这样的软件系统看起来几乎是不可能修改的,每一个新加的成员都会为其复杂度所惊讶,而前期的架构设计应该做好”选址“,尽量避免因为”天灾人祸“的降临,使得”大厦将倾“。
所以,软件的架构设计,亦是建筑的设计,亦可以是你心中,一栋摩天大楼的设计。
屏幕快照 2018-11-21 09.11.42.png