![架构宝典](https://wfqqreader-1252317822.image.myqcloud.com/cover/838/25449838/b_25449838.jpg)
2.3 为什么要做架构设计
2.3.1 由模型到实施
无数的著作中都论及了软件架构和建筑的关系。我认为架构就如同一张蓝图,没有图纸很难建造房屋。如图2.3所示,一个令人神往的海边建筑涉及的方面非常多,具体实施过程包括各种测量和计算,没有一个架构设计的过程是不可能建造成功的。
![](https://epubservercos.yuewen.com/EBFE27/13898202805417906/epubprivate/OEBPS/Images/36066-0035-0015.jpg?sign=1739129210-J7HKTdFNDOm0wiVQ6HE2YoclOZAiuPpU-0-da01c2190f128902afc8ba25bfffe699)
图2.3
如图2.4所示,室内的图纸也有建筑分布、水电图等,以服务于不同的目标。水电图用于指导水电施工,如果搞错了,再返工也是蛮复杂的一件事情。
![](https://epubservercos.yuewen.com/EBFE27/13898202805417906/epubprivate/OEBPS/Images/36066-0036-0016.jpg?sign=1739129210-WkfK1fJ9O0DTYvy9AiVqXY09Fg7Lfbs1-0-031ade104e374fafde65a8f897dc0718)
图2.4
2.3.2 业务规模发展带来的复杂度
如果说设计师给你的效果图相当于UI设计的话,那么建筑工人建造的就是设计的骨架了(比如架构分层、部署)。而合适的架构可以见微知著,适应变化,在快速规模化效应到来时较好地解决客户的问题,如图2.5和图2.6所示的2个例子。
![](https://epubservercos.yuewen.com/EBFE27/13898202805417906/epubprivate/OEBPS/Images/36066-0036-0017.jpg?sign=1739129210-N4WztRyz27sst8WlDh7SLFYx7e7c5exw-0-3a4941d32b8445137f9cbde97576aede)
图2.5
![](https://epubservercos.yuewen.com/EBFE27/13898202805417906/epubprivate/OEBPS/Images/36066-0036-0018.jpg?sign=1739129210-UaQ9Ze8hGwtGTnbqleroDmREbaLvjBZL-0-7154bcf1d94f67daff61ec6a35bad46b)
图2.6
一艘民用的船只如果想要发展成一艘巨舰,就需要在安全性、载重、动力设备、船只内部设计等各方面做出改进。而对于时下很火热的线下O2O业务,广大群众乐于比较价格,计算各种优惠,厂商也乐此不疲地发展营销创新,从街头的跳楼价到打折,不一而足。
如图2.6所示的例子,起初的优惠方式为:打折、立减。转换为规则的表达就是X*折扣比例及X−Y(折扣金额)。演变到第二阶段,优惠方式增加了累计,即打折和立减同时生效。演变到第三阶段便出现了有条件的累计优惠,即阶梯性优惠,指定品种/数量优惠等情况。从三个阶段的可扩展性层面来设计优惠规则,其实并不简单,因为后期的需求与起初相比已经有了很大的不同。
2.3.3 从沟通视角看软件架构
Simon Brown所著的《程序员必读之软件架构》一书中提到了软件架构的若干好处,其中有不少是从沟通的视角来看的,如下:
●让技术团队跟随一个清晰的愿景和路线图。
●对不同的听众,以不同层次的抽象来交流相应的问题域和解决方案。
对于第二点,笔者感同身受。有时候,当产品经理、应用架构师、开发人员甚至还有业务领域专家一起讨论交流时,大家对一个概念有不同的说法,统一名称、形成共识往往是设计架构方案的第一步。