既然了解了什么是软件架构,那么接下来就来看看它产生的原因:《一线架构师实践指南》中说了五点,我的理解是:
架构--是人们为了提高生活质量,进而为了提高生产力,接着为了提高生产效率,而做出的对目标的有机的分割。这种分割与建筑的架构是一样,对目标内部进行空间切分,又留下门窗与各部分进行连通,让各部分相互隔离而又可以有效的沟通。就好像我们的社会,我们每个人通过自己的工作挣到钱(分割),让后通过钱与物的交易(沟通),获得我们各自需要的生活物品(目标)。
那么什么是架构?我的理解是:
架构--是解决问题的实践活动,是解决问题的方案,是我们解决问题的经验。它包括了解决问题的步骤,通过一个合理的步骤,我们按部就班的、快捷的解决问题。那么,我认为软件架构--就是将我们所了解到的目标软件进行有机的分割:目标软件作为一个整体,分割为合适的模块,使得各模块之间的影响降到最低,并留下门窗,即各模块之间的交互通道,从而提高人的工作效率。
接着是认识概念 帮助 理解架构。
概念,也叫名相,是人们认识世界的基础。所谓相,是人们所看到的事物的表象特征以及对他的认知(也就是事物的作用);而名亦如此,是人们给这类事物起的代号(代表着这种事物的表象特征和作用)。那么所谓概念,就是我们解决问题的方案的一个代号,当我们提到这个代号,就会想到这个解决方案。有效的认识概念是必要的,我们时常要进入新的领域,认识新的事物,有效的认识概念可以帮助我们快速的熟悉这个领域,对于我们识别和定位新领域中的元素,思路清晰的分割以及组合各个元素,会有很大的帮助。
那么,如何识别问题?
我们面对客户提出的问题,要有客观的认识,大多时候,客户提出的是解决方案,是他们想要得到什么,但是真正的问题是什么,却可能没有说。面对客户的要求,我们先要弄清问题的主体,要弄清这个问题是谁产生的,然后才是这个问题到底是什么。所以我们做软件需求的时候,才要和每个要直接与网络交互的人或系统,进行交流,只有那些操作的主题,才最清楚软件的作用是什么,才最清楚要解决的实际问题是什么。同时,主体意味着边界,主体确定了,边界就确定了。
识别出问题,就到了切分问题的步骤了,那么如何进行架构切分?
首先我非常同意作者关于人性不可违的观点。人都是自私的,没有绝对无私的人,无论是从精神上,还是物质上,他都会寻求一种获得,而只有获得才是人做事情的动力。笔者说的切分的原则很形象:1.必须在一个连续事件完成的活动不能切分。2.权责相等,保证了不违反人性的原则,也就保证了人性的相齐,人和是一个企业的关键要素。3.切分出来的部分不应该超过一个人的负载。4.内部切分与外界无关,切分导致的新变化,不应属于架构内部,若核心的问题出现变化,那么架构就要跟着变化。
接着,第五部分是软件。
通过阅读《一线架构师实践指南》,我理解到,软件就是人用来控制硬件行为的程序。
成本为王,我们所从事的任何工作,最终的目的,都是讲劳动力转化为财富,进而提高自己的衣食住行即自己的利益,而当劳动力的价值固定下来,我们所能做的就是降低成本,为了降低成本,我们就要提高技术,提高了技术,推动着社会向前进步,我们的利益也就会随之提高。第二点说的是软件的演变,从一个人完成整个软件,到后来多人合作完成大型软件,一切都是为了降低成本,提高效率,增加收益。软件同样是一个问题,我们首先找到所有的利益相关者,然后找到真正要解决的问题,接着对问题进行切分组合,然后实现从而解决问题。
使用elasticsearch遇到的一些问题以及解决方法(不断更新)
Install elasticsearch-head: – for Elasticsearch 5.x
Spring实战5-基于Spring构建Web应用
如何使用 Android Studio 的 git hub 功能
windows中使用Git工具连接GitHub(配置篇)
Git链接到自己的Github(2)进阶使用
Git链接到自己的Github(1)简单的开始
Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
Android Studio 中快速提取方法