阅读了一下王概凯的《架构漫谈》,有一些感受与心得,仅仅发表一下自己的看法和理解。
1.什么是架构?
架构是一个有些抽象的词汇,但转到其他行业或许会更容易理解。如古代朝廷的政府体系三省六部制、或者公司的部门分工等等,由一个个部分有机组成整体的概念有点类似架构的概念。比如一个远古部落,有男有女。这时候人们需要衣服以及食物,于是人们开始分工,男人出去打猎获取食物,而女人负责制衣等等形成了鲜明的分工,对每个角色有针对性的进行切分并有联系,最后有机的合并成为一个整体概念,这就形成了最简单的体系或类比为架构。若男女没有分工而是一同打猎,或者说是一同制衣这样的糟糕安排无疑是一种对人力的浪费,这也是架构需要解决的问题,即提高效率,增强稳定性,并在效率和稳定之中寻找一个最优的方案。
架构其实就是指人们主动认识、解决问题的一个过程,对问题进行切分、合并并解决这个问题的实践活动。
而对于软件架构来说认识什么是架构,有以下几点:
1.根据要解决的问题,对目标系统的边界进行界定;
2.并对目标系统按某个原则进行切分;
3.根据2,使得这些部分能够有机的联系,合并组装为一个整体,完成目标系统的所有工作;
2.认识概念是理解架构的基础
在古代,概念不叫“概念”,而称之为“名相”,名相可以拆分为两个词“名”和“相”,“相”指的是这个作用,而“名”指的是表示这个作用用来交流的词,因此“概念”称为“名相”,就这点出发而言大部分人对日常生活中的物件的认识都是下意识的,而不是主动的去认识。比如一个桌子,在孩童时代,父母指着桌子告诉你:长这个样子的东西就是桌子。从此,你记住了桌子,而仅仅只是被动的记住了桌子的样子,而没有主动去认识桌子的“相”,即桌子的作用:有四条腿支撑一个平面,上面可以放东西,下面中空的可以放腿。
如果一个人朝你要一个杯子,你要理解他并不是在向你提出问题,而是直接给了你一个解决方案即一个杯子,他其实要杯子的作用是为了解决需要“一个可以易于持握,可以装水的容器”这个问题,根据架构的定义,正确认识概念,能发现概念背后代表的问题是要做好架构的必备的能力,只有正确认识问题才能着手解决问题。
3.架构的切分
切分是利益的调整,对于古代帝王来说,自己一个人的权力太大就无法治理好整个天下,因为个人能力有限,因此,如何切分分配权力是历代帝王头疼的一个问题。而软件架构也是如此,不切分就会冗余而复杂。
而切分的原则有几点:
1. 必须在连续时间内发生的一个活动,不能切分。
2.切分出来的部分的负责人,对这个部分的权利和义务必须是对等的。
3. 切分出来的部分,不应该超出一个自然人的负载。
4. 切分是内部活动,内部无任怎么切,对整个系统的外部应该是透明的。
而所有的架构切分整体都应该是一个树状图,而不是有向图或者无向图。由整体切分为一个个大部分,然后再切分为一个个小部分。然后大问题就成了一个个小问题,因此可以分配给能力不同的个人去完成。而切分忌讳人的负载太重,而应使得每个执行者的权责对等,每个人可以对自己的部分负责,而对于一个总体树状图的架构切分来说,层数越多则必定沟通越多,则效率越低,所以分层越少越好,尽可能的变成平衡树,才能使效率最大化。
4.软件架构师
架构师英文architect,这个词源于建筑学。软件工程当中的架构师和建筑工程当中建筑师有许多相通之处,都是负责“产品”宏观的架构设计。
很多行外的或者学生在问,这黑黑的窗口和一行行代码到底是如何变成一个软件的,这就是外人和程序员对软件的理解不同,相对的,普通程序员,也无法理解,他编的一个功能,到底在最后整体架构当中有什么作用,因而软件架构师很少的原因是浮躁的社会容不下一个架构师成长的时间和空间。一个框架师需要大量的项目经验,超级长的编码时间,坚持正确的方法和一个融洽配合的团队。而大部分中小企业因为资本不足,项目只谈功能,而不谈架构。用一句通俗的话来说就是“遇不到敌人,自然变不成老兵”。而要想成为软件架构师同时记住“越往上走,功夫越在代码之外”。
而架构师有什么用呢?架构师的最大作用就是把技术边界往外推,不断侵入管理领域,让技术取代和优化人工管理。而用游戏来说,架构师是一个辅助游戏,给整个团队增加各种属性光环:如减低代码中的混乱,软团队中初级的程序员写出高级的代码,提高单位时间效率避免加班、大幅度减低企业成本等等。
原文地址:https://www.cnblogs.com/zlc364624/p/12330782.html