“架构=整体-部份之和”
一直以来,我们对两个问题的答案总是处于混沌的状态。
1.整体大于部分之和的是什么?
我们说,系统科学研究的是“整体为什么会大于局部之和”的问题,
“1+1>2”
“团队精神,团结就是力量”
“一根筷子容易折,一把筷子折不断”
“项目经理的任务就是带领一群绵羊去战胜一头狮子”
...
以上这些是我们经常用来解释整体大于部分之和的话语。
那么,整体为什么会大于部分之和呢?整体大于部分之和的又是什么呢?
似乎,我们一直没有找到一个简单明确的词语来表达这个“什么”。
2.架构到底是什么?
说到“架构”,一般人总是会油然而生一种敬畏,似乎这应该只是大师们的语料。
大师们的话总是那么深睿,那么神秘,让我们这些普通人琢磨不透。
想体会这种神秘感的话,只需要用“架构的定义”为关键字去网络上搜索一下,
在这里,对此我就不多说了,总的说来,就是对架构的定义,我们目前表达的还不够浅显易懂。
我曾经试着给架构下一个简单的定义是:“架构是资源的整合者”
其基本含义的出发点是:
架构作为动词,是一种对构建性行为的表达,构建性的行为就是使用资源来构筑目标实体的行为。
那么架构作为名词,就应该是将资源整合为目标实体所用的机制和结构。
当然,这个定义并没有被流传开,我也不知道它比大师们的定义有什么差距。
自己感觉,我自己的这个定义还是不够浅显易懂。
庆哥的邀请,让我不得不进行良久的思索;
于是,这两个问题,今日在我头脑中相撞,让我得到了一个至少让自己震惊的结论:
“架构 = 整体 - 部份之和”
也就是说:
“整体 = 架构 + 部分之和”
原来,
一直让我们琢磨不透的那个“整体大于部分的和”的东西,
一直以来我们在用另一个让我们琢磨不透的词语“架构”在指称,
而我们一直都没有坚定地、明确地、理直气壮地这么宣布。
架构应该等同于总体设计吧。总体设计是什么,应该比架构更容易理解。架构这个词搞出来后,什么东西都能安上“架构”之名,不只是在软件范围内讨论,而是在软硬件集成的范围内讨论了。一个系统,有目标架构,有逻辑架构,有物理架构,有安全架构,有元数据架构,有接口架构,有应用架构,有分发架构,有无穷多的架构,能听得人吐血。甚至超出系统集成的范畴,还能有业务架构,流程架构,组织架构(这个东西倒是随处可见)等等。或者架构本来就是从其他领域来,到了IT圈里被四处滥用。不过换汤不换药,东西还是那东西,不就是总体设计嘛。
泛泛而谈的话,正好可以得到目前架构运用的结果:架构混乱,滥用,1+1<2,等等等等.
庆哥也知道,凡是都要问个为什么?追问下去,就会找到本质,找到本质就能顺利地回溯,指导我们设计.
我喜欢从本质回溯地往外谈事,但这并不表示我不关注具体的应用层面.
我理想中的探讨方式是:探讨的各方能够迅速地站到相同的领域,相同的层次,相同的视角和相同的视域内
,交换各自看到的图景,随着探讨的深入,我们会逐渐变换到相同领域的每个层次,每个视角和每个视域,交
换我们各自心中所有的视图.
不理想的探讨会比较浮躁地用不同视域的图景来相互辩论,这样的辩论本来可以用共同转移视域来避免的
.
也许庆哥会习惯性地觉得我上面这些"条条框框"比较难懂,即使懂了,也难以照办,即使照办,也会压抑思
路.其实,这正是彼得.圣吉所倡导的"深度汇谈"的方式,而且,我上面对这种汇谈方式的表达已经相当具有
BI风格了,可惜,我们中大多数人是不知道的,这正是进行科学管理,培养学习型文化所面临的挑战.
这是我预料到的结果,所以,在遇到我明知是不理想的探讨方式的时候,我不会付出太多的耐心,毕竟,我的
职业不是讲师.
谈回架构问题,
我们可以顺着"架构是用来整合资源的机制和结构"的这个本质效能表达的思路去推衍所有架构存在的理
由,并验证所有对架构理解的真伪.
我们就仍然暂时先不去谈"软件架构",模仿大师们的足迹,我们也先谈"建筑的架构",不过,谈法稍有不同,
是从我的本质效能的表达出发来谈的.
建筑是什么?从表面看,一次建筑活动的整体目标是建设一座事先设计好的建筑物,从本质看,一次建筑是
满足一个社会群体的某方面的社会活动的需求.是通过将自然资源----水,泥沙,石头等等,整合为满足目
标社群某类需求的实物.水,泥沙,石头等不能直接满足,只有将它们整合起来,才能满足,这就是本质.
建筑满足的需求是什么呢?居住,从能挡风遮雨到舒适惬意;通行,从能坚固耐用到能安全顺畅;观赏,从能
独具风格到能体现文化魅力;纪念,从能寄托情感到能永垂千古;建筑,首先要整合的,是这些需求资源,其
次,才是水,泥沙,石头等工具性资源.
于是,我们会透过"建筑布局","建筑结构","建筑装潢"看到所谓的"建筑风水","建筑风格","建筑空间","
建筑效能"等等.无非就是整合建筑资源满足建筑的需求.
建筑是如何来整合建筑资源来满足建筑需求的呢?其机理和结构是什么呢?这才是建筑架构的内容.
我猜想,建筑师要涉及一座建筑的架构,他首先要做一件事:
确定业主和业主的需求,主要是得到业主对建筑规模的预计。
如果是小规模的建筑,只有功效的需求,架构起来比较简单,也许根本不需要建筑师出马,找个工头就
搞殿了。
对于大规模的建筑,才会有风水的需求,风格的需求,空间的需求和功能性能效应的需求。
对于风水和风格的需求,建筑师要考察当地的地质水文,风土人情,文化习俗,建筑风格,业主心理,
业主习惯等等,建筑师需要设计适当的地址,朝向,基础结构模式,空间布局,建筑外形,装修风格等
等来满足。
对于空间需求和功效的需求,建筑师和结构师会利用理论力学,材料力学的原理,来设计出适当的建筑
外形,基础结构,空间划分结构(梁柱板墙结构)来满足。
当然,建筑架构设计的内容,远远不止我这里谈到的这些内容,我这里只是站在外行的角度来理解而已
。建筑架构设计的本质,在于运用"力"。拉力,粘力,压力,撑力,扭力,张力,摩察力,冲击力等
等,运用各种力的效应,化解各种结构的问题。有意思的是,我发现,对于抽象的精神需求结构,也可
用同样抽象的信息力的原理来化解,我认为,这正是建筑架构和软件架构相通的本质所在。
象我这样的建筑外行也可以斗胆猜测一二,得益于我对架构本质的"瞎"捉摸,希望得到真正的建筑专
家的指正,毕竟,我不是职业的建筑师,我只是一个普通的软件架构设计人而已.
另外,关于整体和局部的关系问题,正好前段整理了一篇帖子,在我的坛子上,给庆哥参考.
http://www.smarthings.net/bbs/viewtopic.php?t=37
帖子的名字叫"面向对象的'套箱结构'"
为了讨论方便起见,约定后面谈到"架构"一词,专指其名词含义.
"架构是用来整合资源的机制和结构",这句话既表达了架构的本质作用:整合资源.也表达了架构最主要的名词性解释:机制和结构.
"架构的本质是运用抽象的信息力",这句话表达了软件架构机制的本质:软件架构为了整合信息资源必须遵循的信息作用关系的一般规律.尤其表达,信息作用关系是可以和物理世界的力的作用关系相类比的观点.
架构不专限于交付物交付之前的起支撑、粘接、传导、约束等作用的物体,更主要的是,交付之后,这些物体以及它们起到的作用效果仍然是构成交付物的关键要素。“整合”不仅仅是一个过程,同时,还是一种功用,例如,“柱”的整合作用是它支撑了“梁”梁的整合作用是它支撑了墙和板,而墙和板的整合作用是它区隔了空间。只有在这样的整合作用下,砖,沙,石,钢精,水泥,木板等资源,才能组合成具有一定风格和功用的建筑,才能达到最终的目的:满足用户的需求。
我之所以突出架构的功用,是认为,只有突出功用,才能联系需求,而需求,不仅仅是一个具有功能和性能的交付物这么简单,还有凝聚在交付物上的经济价值,审美,文化,品位,风格,吉凶(心理暗示)作用等诸多的元素,这些元素聚集在交付物上,应用于特定的用户环境,才构成整体,这才是比较完整的需求。只有架构,才能帮助那些零散的资源,达到这样的整体效果,当然,好的架构,会得到好的整体效果,差的架构会得到甚至相反的效果。恶劣的组织甚至差过散兵游勇,就是这个道理。
因为在公式:整体 = 架构 + 部分之和
中,架构(起到的功效)可能=0,>0或<0;
随着讨论的继续,我的话题会转向软件架构,并希望能最终谈到BI系统的架构,当然不是我一个人能做到的。但始终会贯穿一个观点:“整体
= 架构 +
部分之和”,也就是:"架构是用来整合资源的机制和结构"。
看来,庆哥还是没有理解到架构的有形部分,以至于可以把"设计"和"架构"的概念搞混淆.
"一纸设计"和"一体架构",是不可以相互取代的。
我举这么多"柱啊,梁啊,板啊,墙啊"什么的例子,不要让我白费心思啊.
"架构的需求就是来源于业务角色的非功能性需求"这是官话,是没有错的,但我要问:
为什么呢?
对"非功能性需求"和"功能性需求"你又是如何界定的呢?
有没有什么功能性的需求,就是对架构提出的,必须用架构来满足的呢?
比如,我要一间30平方米的办公室的空间,公司需要一个200平方米的会议室的空间,
这是功能性需求,还是非功能性需求呢?.这明显是要用架构设计来满足的.
架构和需求到底是什么关系呢?
当然是解和问题的关系,笼统的一句"架构为满足非功能性需求而设计"显得非常含混,很虚.
但如果说,"架构是为将零散的资源整合成为一个有用的整体而设计的",就显得明确了很多,实在了很多.
庆哥为什么不对比这两个描述,回头再看看自己所谈的"实内容"呢?
需求是问题和机会,需求是目标,是想知道什么,想改变什么,想得到什么的渴望,但每个需求都不会自动满足,也不会唯一而纯正地得到,需求和不需求会同时到达,这种需求和那种需求会有关联和约束,这种需求满足多了,那种需求就可能满足得较少,甚至还会另外得到一些想“不得到”的结果(反需求).
所以,需求之间,需求和反需求之间具有结构关系.
满足某个功能性的需求的,可以是一个经过小规模整合的实体,但满足一系列相互关联的功能性需求的时候,就要将哪些小实体当作资源,进行更大规模整合。再次提醒庆哥,"整合"不仅仅可以表达一种行为,一种设计概念,还有实施整合时所需要的实物,这些实物及其配置关系、与其他资源的配置关系,就是架构的有形部分.
所以,需求是综合性的,是有结构的,这种结构,不仅仅牵涉目标需求内部的权衡,还且还牵涉和影响到与目标反需求和目标外的需求和反需求的权衡.
需求靠整合资源来满足,我们在就要在设计和制造目标实体的时候,在真正进行资源整合的时候,充分的考虑对资源的合理使用,合理配置的问题,比如,设计三峡大坝的时候,就要考虑如何解决对生态平衡的破坏问题等,这些,就是架构设计和架构实施的内容.
因为需求有结构,所以满足需求的资源配置也必须有结构,而且二者必须匹配,这才是架构设计之所以存在的真实原因.
谈到架构师,实际上我们中大部分的架构师只是架构使用师(工程师),而非架构设计师.真正的架够设计师,就是那些设计广为流传的设计模式的大师们,由于我们中大多数人都还只是"架构使用人",偶尔出现一两个"架构设计人",大家都会不认识的.这很正常.
本来这次是可以谈点"实"的东西的,
但我总是发现我们有太多的"虚失误",不解决"虚失误",难道可以根本解决"实错误"吗?这是个相当让我们困惑的问题.