浅谈软件体系架构

最近正在学习《软件体系架构》这门课,刚好在博客园看到了架构漫谈,看了这九篇文章之后,对于软件架构有一个大体上的理解。

架构在专业英语中的单词是Architecture,这个词在软件工程行业里的产生是与建筑学有关,architecture在建筑里面的是建筑学,体系结构的意思。早期的时候人都是独立生活的,人的群居性的一部分原因就是一个独立的人在有限的时间内所做的事情是有限度的,当人生活在一起之后,每个人根据自己的能力完成一定的事情,每个人都有不同的角色,由这些角色来完成不同的分工,然后根据一定的规则把不同角色完成的分工组合在一起,形成一个整体,然后完成这个整体所需要的所有活动,这就是“架构”。架构的出现使得人们的工作效率得以提升,更使得每个人在整体活动中的能力都得到了充分的利用。

在建筑学里的的架构就是能够满足人的需求,提升质量,减少时间,并且更有效率的切分空间,让空间之间更加有机的进行沟通。

架构切分就是当一个人所承担的工作超出他的极限,即这个工作一个人不能完成,这个时候我们就需要对于这个工作的整体进行切分,让不同的人来完成切分出来的他们所擅长的工作。

在软件工程学科里面,架构就是:

1、根据这个系统要解决的问题,对于系统的边界进行界定;

2、并对于目标系统按照某个原则进行切分。切分的原则,要便于不同的角色,对于切分出来的部分要串行或并行的开展工作,一般情况下并行才能减少时间,如果你切分出来的工作有一个或多个没有与其他的进行联系或者对于其他部分没有用处,那你切分出来的这部分就没有意义了;

3、像2所说的那样,对于每个切分出来的工作之间都要建立联系,设立沟通机制;

4、然后对于切分出来的每部分也要合的起来,形成一个整体,完成系统所需要进行的工作;

架构这个词在软件工程行业里的出现是为了要解决问题的,所以我们必须先识别出来自己在这个系统中需要解决的问题是什么,大多数人都会把这个忽略掉,而把重点放在了解决方案上,当我们被告知要处理一个问题的时候,告诉我们的实际上不是一个问题,而是这个 问题的解决方案,或者是我们看到问题之后通过直觉有了一个解决方案,然后把重点放在解决方案上,而忽略了问题本身。架构师要问的第一个问题就是:问题是谁的问题,找出问题的主体。当明白了问题的主体,我们才可能真正认识到问题是什么,因为问题的主体是问题的隐含边界。

每个人的能力都是有限的,把在时间上串行的动作,切分成时间上可以并行的动作,在空间上横向扩展,比如我们要做一个系统的时候,当这个工作接下来才能进行下一步,而这个接下来不是说下一步的工作前提是上一个,而是时间上的接下来,我们就可以把这两个工作在时间上让它可以并发执行。切分有几个原则:

1、必须在连续时间内发生的一个活动,不能切分;

2、切分出来的部分的负责人,对这个部分的权利和义务必须是对等的。因为每个人都追求利益最大化,如果不对等,会损害个体(承担责任多的人)的利益,分出来执行的效率比没有分出来还要低就违背了切分的初衷,架构分拆的结果应该是树状的;

3、切分出来的部分,不能超出一个自然人的负载;

4、切分是系统的内部活动,对整个系统的外部应该是没有影响的;

架构解决的问题是人的问题;

架构切分的结果一定是一个树状,树的层次越多,之间的沟通越多,效率就越低,所以层数要越少越好,这样才能让整个系统的效率达到最大化。

讨论软件架构的问题就要先明白软件是干什么的,软件就是专业人员使用一些计算机语言和专业知识在计算机上模拟出人的工作从减轻人的工作负担并提高工作效率。

软件架构实际上包括:代码架构以及承载代码运行的硬件部署架构。

架构师解决的是别人的问题,平衡别人的利益,甚至会调整别人的利益。要做好一个架构师的职位,必须自信,去学会发现问题的主体,识别真正的问题。

原文地址:https://www.cnblogs.com/chenjie00/p/5443916.html