卷首语
当我们在架构设计的时候,我们到底在做什么?
我们为什么要进行架构设计?如果我向架构师征集这个问题的答案,我想可以收到成百上千条。这些答案绝大多数都是对的,但是可能都是一些理性的回答,例如架构可以让代码更稳定、更高效或者更富有弹性。如果抛弃这些理性的分析,从感性上来讲,是什么驱动着我们克服重重困难去做架构设计这个苦差事呢?
我想这就要归因到我们成为程序员的初衷,我们投身到互联网这个行业,就是因为这个行业总是在追求对世界的改变,并且是向好的方向改变。不论是让人们的生活更便捷,还是让这个世界更透明更安全,这些改变都深深地吸引着我们,因为作为程序员的我们就希望生活在一个便捷透明的世界里面,或者说我们都希望拥有一个更简单更从容的人生。
再回来看我们上面列出的答案,架构设计不论是力求简洁高效,还是追求稳定和弹性,这不就是一个程序员世界观和人生观的映射吗?或者说我们在进行架构设计的时候,我们其实在按照自己的内心设计一个小的世界,一个一定程度上由自己说了算的世界。
让我们来看看,在这个说了算的世界里面都有什么?
1.这个世界里面有“墙”,我们希望能把代码梳理清晰,各有所属,各司所职,并且剔除坏的代码,让好的代码发挥更多的效用。解耦是架构设计永恒的主题。
2.这个世界里面还有“路”,路把代码有机地联系在一起,信息在路上自由地流动,互通有无,我们希望沟通简洁而有效,因此每条路都清晰而有序。
3.这个世界里面自然还有“人”,除了作为建设者的程序员,更多的是这个系统的其他参与者,对应的是整个系统各个环节上的伙伴们,有产品有运营有运维也有测试。一个完整的架构设计,需要让所有的人都可以在这个世界里面找到自己的位置。
4.有了人,也就有了制度。正如康威法则所揭示的,组织架构和代码架构之间存在着映射关系。我们在设计的时候需要参考组织架构,但同时我们也希望一个更好的代码架构可以反过来推进组织架构以及业务流程的改变。任何架构的设计,包含了架构师对外在环境的感知,自然也蕴含了其对外在环境的期许。
也许评价一个架构是否合理,也是一个感性的事情,如果这个架构契合了内心希望的那个世界,这种架构就是程序员所推崇的。很多情况下,我们要大刀阔斧的去进行架构设计,或者孜孜不倦地调整架构,就是因为架构的内在和外在还有我们不能忍耐的地方,就像我们不能忍耐生活中的某个方面而总是寻求着各种改变一样。