通过对王概凯写的《架构漫谈1-9》https://www.infoq.cn/profile/1279517?menu=publish#menu-trace的阅读,总结出以下几点:
(一)什么是架构?
1、根据要解决的问题,对目标系统的边界进行界定。
2、并对目标系统按某个原则进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。
3、并对这些切分出来的部分,设立沟通机制。
4、根据3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。
(二)为什么会产生架构?
由于不同的社会分工加上角色分配,建立起不同部分的有机结合,整合起来,达到这个整体的利益最大化,就是把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部少时诵诗书或分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。因为社会分工的不同,每个人的能力有限,人的要求、目的的更高要求,如何在不同的部分做合理的分配、从而提高工作的效率。用作者的话就是架构就是指人们根据自己对世界的认识,为解决某个问题,主动地、有目的地去识别问题,并进行分解、合并,解决这个问题的实践活动。
(三)认识概念?(以人的认识为主体讨论)
“概念”是人认识这个世界的基础,是人认识这个世界并用来沟通的手段,自然概念的认识就非常的重要。
每个概念实际上所解决的,还是人遇到的某个特定的问题,我们把解决问题的解决方案,给定了一个名字,这个名字就是对应的某个特定的概念。比如杯子的概念就是解决“人需要一个可单手持握,但是希望避免直接接触所盛物体”这个问题的。
(四)认识问题?
我们大部分时候过于关注解决问题,急于完成自己的工作,而不关心“真正的问题是什么
当我们去解决一个问题的时候,一定要先把问题搞清楚。
如何识别问题?
·前提就是要搞清楚:是谁的问题,即搞清楚问题的边界。
(五)架构的切分?
很多时候问题的产生都是因为沟通的误解,或者主观上有很多不必要的利益诉求导致的。但是总还有一部分确实是有问题的,需要做调整,那么就必须要有所动作,做相应的调整。这个调整就是架构的切分。
1.必须在连续时间内发生的一个活动,不能切分。
2.切分出来的部分的负责人,对这个部分的权利和义务必须是对等的。
3.切分出来的部分,不应该超出一个自然人的负载。
4.切分是内部活动,内部无任怎么切,对整个系统的外部应该是透明的。
5.确保我们不能违反人性,因为维护自己的利益。所有的架构分拆,都应该是形成树状的结果,不应该变成有向图,更不应该是无向图。
实际上切分的过程就是建模的过程,每次对大问题的切分都会生成很多小问题,每个小问题就形成了不同的概念。
—>架构的切分的导火索是人的负载太重。
—>架构的切分实际就是对 stakeholder 的利益进行切分或合并,使得每个 stakeholder 的权责是对等的,每个 stakeholder 可以为自己的利益负责。
—>架构切分的最终结果都会体现在组织架构上,只有这样才能够让架构落地并推进。
—>架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。
软件一直以来的动力,始终都是来模拟人和这个社会的。
(六)如何成为一个好的架构师?
1.能够正确的认识概念,能够发现概念背后所代表的问题及人的利益,进而才能够认识目标领域所需要解决的问题,这样才能够为做好架构打好基础。
2.找出问题的主体是做架构的首要问题。即解决一个问题之前,一定要先把问题搞清楚,搞清楚目标问题是谁的问题,架构师都要有这个自觉:发现问题永远都比解决问题来的更加重要。
3.能将大问题切分成若干小问题
4.架构师还必须要明白,所给出的解决方案 -- 架构的分拆、合并方案,只有让问题的主体的权责对等,才能够真正的解决别人的问题。
5.要有自信
6.架构师是要去平衡别人的利益,甚至会调整别人的利益的。
7.具有准确识别采用什么技术的能力
8.架构师应该承担起解决业务问题的角色,将技术和业务两者很好的结合起来,让软件更好地服务于人。
附:怎么处理业务、技术还有架构的关系
1.技术是为了解决业务的问题而产生的,没有了业务,技术就没有了存在的前提。
2.有了更好的技术,效率更差的技术,就会慢慢的被淘汰,消失,一切都遵从人类的利益诉求 ——也就是业务。
3.在解决同一个业务问题的前提下,更高效,更低成本的技术,会淘汰低效,高成本的技术。
4.技术是不断地在更新和优化。
5.不同的技术,通过树状结构,组合在一起,形成了一个完整的架构解决方案,共同完成业务的目标。
小收获:(从架构的角度看如何写好代码)
软件架构实际上包括了:代码架构,以及承载代码运行的硬件部署架构。实际上,硬件部署架构最终还是由代码的架构来决定。想快速的完成代码工作,就要克服自己对时间的恐惧,真正的去研究业务的问题,相关 stakeholder 的利益,把这个变成我们的习惯。写代码的时候让该出现逻辑的地方出现逻辑,让不该出现的地方不能出现。一旦不该出现的地方出现了逻辑,那么要马上意识到,这个地方是一个坑,这个问题一定和业务的分析不透彻有关系。