19
架构师要构建架构,刚才我们对架构师是什么,已经搞清了一些内容,然后也要对架构这个动词对应的这个概念要有深入的理解。
谈完了架构师,谈谈架构师的动作,“构架”这个动词,是什么意思?
Architecting/构架
A set of interrelated activities of conceiving, defining, describing,documenting, maintaining, improving, and certifying proper implementation of anarchitecture throughout a System’s life cycle.
一组相互关联的活动, 在整个系统的生命周期中构思、定义、描述、记录、维护、改进和证明体系结构的正确实现。
构架,是直接相关的活动,所以说,是一个活动,而这个活动包括了concerning构思,构想这就像女人怀胎在孕育一个孩子,构思完了之后,你还得描述出来,不能光想孩子不出生吧,总还得能表达生产出来吧,同时,也要记录,维护,改善,重新思考,再描述再完善,然后还要认定取舍,从而形成一个架构,整个软件系统的生命周期里,要经历这样一系列的过程。
怎么描述,怎么稳当的话,怎么方便沟通的话,就怎样描述,然后记录下来这些描述,最终做完架构的时候,要有一些详细图表,文字说明。比如软件开发要写文档,一定要有这个东西,不然你在做什么呢,这是阶段性成果的东西。最后的时候,软件架构的文档要形成。
我们要做事情,首先要构想,然后把构思描述出来,然后把那个描述记录下来,存档,而且还要维护,并不断的改进我们的描述,这样通过不断的实践检验,架构在系统中,就会越来越体现出它的优越性。
20
首先,构架是在一个系统的生命周期里的。我希望大家能用形象的比喻,把最关键的概念讲清楚。
毛泽东在说到长征的时候,用了一系列的比喻,他说:长征是宣言书,长征是宣传队,长征是播种机。
长征就像做生意,开一个店一样,我们的收入是红灯,那些才是我们的架构,是的吧,然后。然后他把他们开店的过程,用一个比喻了。长征是宣言书,长征是一个宣传机,长征也是播种机。
我们能用哪些比喻来形容构架呢?
在定义需求活动,以及创建平台无关的架构活动中的任务。我们系统的语境/范围又是什么,所以说我们的问题就来了,我们系统的语境和范围是什么呢?
《名侦探柯南》这里面有很多故事,它是用非常形象的比喻,来说明了很多问题,我们可以简单的学习一下。
比如,名侦探柯南,引爆摩天楼。
新一收到了来自世界知名建筑家——森谷教授于其宅邸举行的晚会的请帖。柯南、小兰和小五郎应邀出席。此即为事件的开端……发生了作为特殊火药的塑胶炸弹大量失窃的案件。那个自称凶手的男子打来预告电话,与柯南展开博弈。犯人再次向那里打电话,“工藤为什么没来!”那家伙是从哪里观察的?!随后,凶手连续发来炸弹预告。炸弹究竟被安在了哪里?城市陷入了恐慌。
它用了几条导火索,来比喻一些事情。
第一条导火索,即开头的案件 一年前的医疗事故。
当初,你与黑暗组织决斗时,与他们同归于尽,但你却活了下来。可是你醒来后失去了记忆。其实我早在六年前就有恢复记忆和变大的解药了。只是,吃了以后,你会失明。我们宁愿让你失去记忆,也不愿让你失明。这对一个普通人来说都是残忍的事情。更何况大侦探?所以你的父母才会对小兰说你死了,让她不再想你。我也自私的想让你和我在一起。我以为你不恢复记忆,就会喜欢我。可是我错了。你即使不恢复记忆,也只是喜欢毛利兰一个人。永远都是,这是注定的。我不知道我到底那里比不过毛利兰。也许我永远也会明白。现在解药放在桌子上,你吃了以后就会一切了。我没有和你的父母商量就自作主张把解药给你了。希望他们原谅。
第二条导火索,森谷帝二的完美之心。
森谷帝二十分热衷于设计完全对称的建筑物,但米花大厦由于当时的经济问题,资金周转不开,无法按照他想的那样建造,拒绝了他完全对称的提案并且建造了不完全对称的米花大厦,森谷帝二十分追求完美,为了将自己所有的不完全对称建筑摧毁,同时也为了报复让自己的西多摩市计划功亏一篑的工藤新一,引爆了摩天大楼。
导火索,弹药库,比如我认识到的一个销售,他的比喻能力就很强,他总能把客户的兴趣点和他要销售的产品结合在一起,比如他的比喻也比较形象,就用了了望台,弹药库这类的比喻,这样一说话,人家一下就听懂了,他要表达的意思了。
22
但我们的要求是什么呢,我们也能用一些比喻,来形象的表达我们的构架,以及关键性的过程。
那,我们的架构是什么?
同样也需要用毛泽东的长征,这样类似的响亮的方式来做一个形象的比喻,我们把重要的内容,把你的体验,写完了之后,一定要能用三句话来表达出来。
我们从宏观的角度从有几个大的方面来看一下,首先它要有输入,有系统分析师,还要有定义,软件需求,系统需求,然后在这个基础上还要做两件事情。
也就是,架构活动分两部分,第一平台无关的架构,第二是创建平台相关的架构。架构师执行架构活动,它需要来自设计团队,以及实施团队对他的帮助,创建一个平台相关的详细的设计。
其实这是就我们的思维方式,先是一个语境,然后在这个语境里再去细化问题。比如:Enterprise->System->Software,Hardware,Organization,Information
现在的问题是,不同人眼中的系统/架构会矛盾吗?
大家都知道,在一个软件开发过程中,实际上具体的开发时间不超过15%,85%的时间其实都在想清楚一些事,怎么能把它量化,怎么设计,然后实现的时候,它用的时间很少的,花的时间最多的是我们的设计。
23
图片002:需求金字塔
注意,这张图非常重要,我们会反复的讲到这张图,它贯穿在本书的始终。
那怎么想清楚,怎么把它细化呢,第一个就是要收集需求,调查数据。
图片002:如何搜集需求
图片003: 项目的范围管理
图片004: 管理干系人的期望
图片005:项目沟通管理
需求的定义、类型、层次和记录是什么?需求
A requirement describes a condition or capability to which a system must conform;
一个需求描述一个系统必须符合的一个条件(condition)或者能力(capability)。不是直接从用户需要派生,就是被陈述在合同、标准、规约、或者其它被正式提出的文档中。
那个需求金字塔中,有四类不同需求的定义,涉众诉求,特征,软件需求,约束都是什么意思呢?
涉众诉求:涉众在方案空间中想要状态的一个方案无关的表达。特征:被系统直接用于履行涉众诉求的一个外部可以观测到的服务。软件需求:分为两个部分,一个是功能需求,这是从一个黑箱透视图指定方案如何与外部世界交互的一个需求。另一部分是非功能性需求,这是从一个黑箱透视图表达方案的质量属性的一个需求。约束:对系统的设计或者用于构建系统的过程的一个限制。
比如,一个课程注册的例子。
图006:课程注册系统示例
图007:需求层次的关系
那什么不是需求?
设计不是需求:设计模型详述系统中的组件或才组件与其它组件的接口,实现需求。核实不是需求:测试套件包含测试脚本以及测试日志的集合,符合需求。项目数据不是需求:软件开发计划详述进度、核实和确认计划以及配置管理计划,符合需求。
什么叫构架,还有什么是涉众,这是我们共同的词。最后我们要定义一下我们的语境,是哪些人,怎么样考评等等,把我们的需求功能性说明书的和非功能性的说明书,都要在一定程度上定下来。
软件的质量是由两部分构成的,功能性和非功能性。
在需求分析过程,通过使用需求的优先级来确定重要程度,优先级弄完了,就要开始项目设计,架构设计,然后要循环迭代过程,还要看,我们的架构能不能满足这些的需求呢?
这个时候要体验一次迭代过程,最后要有一个软件架构文档记录下过程。一般是用一些图表类似的比较直观和易懂的形式来记录下来,这个工具一般就是UML。现在我们有了需求了,然后就要开始去创建平台无关的一个活动。
那,从我们上面的描述中,什么是系统和软件工程?
大家都是社会人,来自不同的领域,可能所使用的词汇是不一样的,为了方便交流与沟通,还要制定一套概念,来统一思想,在这种语境下来理解问题的时候,那定义这些概念的内涵和外延就不能有歧义,因此,使用国际标准是一种必然的选择。
24
软件工程,也有一个自己的知识体系。软件工程的理解,UML是一个国际标准,通过知识范畴,记录下来架构的描述语言就是架构的知识。
刚才我们讲的是系统的架构,现在来探讨一下语境是什么?
一个企业有一个系统或很多系统运行着,包括着,软件、硬件、组织和信息。
然而我们的问题就来了,在不同的人眼中去看这个系统,他们眼中的系统架构会是一种矛盾吗?
比尔盖茨说他是架构师,我们这是一个企业中的软件架构,比尔盖茨其实是企业家,虽然最高级的奋斗目标,是企业家,但我们谈的不是企业家。
我们谈的是系统,是系统架构,从个人的发展来说,他可能做着做着,做到了企业中的信息官(CIO),或者整个公司的系统架构师,一个公司有很多系统,就有很多的系统架构师。在企业的组织结构中,软件架构师当然也需要了解一些硬件架构,架构师也是跟组织集合映射在一起的,这是我们的核心概念。
25
那,不同的人,从不同的视角下来看待系统,会看到什么呢?
先看一个盲人摸象的故事。
Blind Men And Elphant
图008 盲人摸象
There were six blind men from India who come across anelephant. Each one touched a different part and each thought the elephant was sdifferent thing.
Ear=fan, leg=tree, trunk=snake, side=wall, tail=rope,tusk=spear
故事是这样说的,有六盲人来自印度, 他们遇到了大象。每一个都触及了不同的部分, 每个人都认为大象是不同的东西。于是,不同的人就认为,耳朵 = 风扇, 腿 = 树, 树干 = 蛇, 边 = 墙壁, 尾巴 = 绳索, 象牙 = 矛。盲人大象的故事,六个盲人都碰巧了,碰上了一头大象。让每个人去了解这个大象不同的部分,然后他们就都认为大像是一个不同的事物。
图009 盲人摸象形成的结果
这就是说,有一个系统或者说有个架构,根据我们根据这个系统的记录,去总结出整个架构的中心思想。从而通过抽象以及关注点的分割,可以将软件的复杂性降低。
这六个人,他们认为系统是干什么的?
有人碰到大象的耳朵,还是大象。有人碰到腿,他认为。有的人碰到大象的那个鼻子,有的人头大象的这个肚子,他认为一些堵墙,有的人说是绳索,绳索,然后呢有个人碰到大象的长牙。
显然,对应到我们系统来说,他们也就是六个不同的涉众,因为他们的关注点不一样,他们得到系统的方面也是不同的,综合他们的观点,其实是得到了六个视图,也即六个不同的角度下的感观认识。
这个系统的六个视图的核心思想就是这个东西。其实软件架构的设计,成为一门学科,是由发表天95年的《软件功能》杂志上文章,又总结成了我们今天的框架思想,4+1视图,是一种著名的框架思想。
图010,011 Philippe Kruchten提出的4+1视图方法
网友评论
你说的框架,构架,我看了后,对自己有什么用?能够运用到哪个方面?对什么起到作用。。。我看不懂。哭(´;︵;`)
我才疏学浅,还是看不太懂。。