初学架构设计的第一步:需求、愿景与架构

了解<需求>、<愿景>与<架构>三者的关系。也就是<需求分析>、<观想愿景>与<架构设计>三者的关系。


一、需求(Requirements)分析:

这通常是由目前面临的问题(Problem)所引发出来的。着重于现实问题和条件的分析,然后寻求解决问题的方法、技术和资源。就系统开发人员来说,需求主要有两种:用户需求和系统需求。一般而言,人们通常会把它看成是系统开发时必须满足的<限制>(Constraint),也是要达成的<目标>(Goal)。

(视频课程,请点击上图)

二、观想愿景(Vision):

由于需求非常贴近现实,若直接拿来当作<目标>的话,常有见招拆招或见树不见林的缺点。甚至,会有<短视而缺乏远见>之嫌。于是,透过观想愿景来汇集更多视角、扩大视野、产生洞见,成为系统开发的理想目标。一般而言,带来重大革新的公司(如苹果)都会提出一个愿景(Vision),告诉人们应该去追求的事物。苹果公司的前首席设计师布鲁诺(R. Brunner)说道:“通常,伟大产品的成功之道并不是从草图和定义开始的,而是以一个点子(想法)开始,形成一条切实可行的路;然后对此不断开发和经营,这是一个战略性的过程。”

(视频课程,请点击上图)

三、架构(Architecture)设计:

  • 需求分析从现实(Reality)出发,不但找出问题,并且厘清它的现实条件和限制。观想愿景则指引出我们的方向和目标(Goal)。架构设计就从这个目标出发,以终为始,从愿景映射到现实(Mapping from vision toreality)。恰好与需求分析是相反的视角,两者互补而相成,殊途而同归,才能得出一条从现实通往目标之路(或蓝图),这就是所谓的架构(Architecture)了。

两者互补:需求分析偏重<分>,架构设计偏重<合>

  • <分>的另一面是<合>。需求分析注重于<分>,另一面是架构设计注重于<合>。许多人误认为,架构设计是要寻觅系统的共通性和不变性。其实,这是需求<分析>的工作;而不是架构<设计>的工作。在人们展开对事物(或系统)的分析(Analysis)过程中,自然而然会对其分析结果进行抽象,抽出万变不离其<宗>,把此宗视为不变的序(Order)或本质(Essence),就会得到系统的共通性和不变性了。如下图:

  • 需求分析与架构设计是两个不同视角,互补而相成,所以架构师必须兼顾两个视角,才能完成一个优质的架构(蓝图)。架构是独一无二的,架构设计是追求独特性的、气象万千的、与众不同的崭新组合。

  • 苹果乔布斯说:“创造无非就是把事物联结起来。即若是非凡的创造通常也不过是对已有事物进行的新组合和关联而已。”

  • 在《7 Brains:怎样拥有达芬奇(De Vinci)的7种天才》一书里,作者写道:“能不能看出事物的关系和模式,并做出不寻常的组合和关联,乃是创造力的核心要素。”

  • 例如在飞机行业里,架构师的愿景是把一群各自「不会飞」的组件(如轮胎、引擎、机翼、机尾、油箱等),以精致架构将它们巧妙地组<合>起来,竟然整体就飞起来了。如下图:

  • 从愿景出发,架构师心中先有<合>的目标,才来做分的动作。分离出很多接口,依据接口来组合出许多新奇的产品。

  • 例如肯德基餐厅卖炸鸡,肯德基是客人来之前大师傅先做分(庖丁解鸡),等客人来了才由柜台的小弟×××迅速组合,如下图:

  • 如果您想更进一步培养架构师的丰富素养,就请您参阅我(高焕堂)的书籍:《思考软件、创新设计:A段架构师的思考技术》(北京.电子工业出版社)。

相關文章:

1. 两种观点兼顾的架构设计方法

~ End ~

转载于:https://blog.51cto.com/8204129/1705711

初学架构设计的第一步:需求、愿景与架构相关推荐

  1. 领域建模——架构设计的第一步(下)

    领域建模--架构设计的第一步(下) 正如上一篇所述,在领域驱动设计中策略设计侧重于子域的拆分和集成,其结果是合理划分的子域以及它们之间的交互关系.当系统已经被拆分成子域之后,领域驱动设计中的技术维度则 ...

  2. 领域建模——架构设计的第一步(上)

    领域建模--架构设计的第一步(上) <深入剖析架构师角色>中我们提到,架构师需要能够从问题领域出发推导出满足业务需求的架构体系,同时又能够从实现方法入手设计出能够满足业务架构需求的技术架构 ...

  3. 架构师的第一步:学习两种抽象视角(Abstraction View)

    [ IT史上最完整.最经典的软件框架开发技术宝典 (上百篇经典文章&eBooks) ] ee                                                   ...

  4. 架构设计第三步:评估和选择备选方案

    上一期我讲了设计备选方案,在完成备选方案设计后,如何挑选出终的方案也是一个很大的挑 战,主要原因有: 每个方案都是可行的,如果方案不可行就根本不应该作为备选方案. 没有哪个方案是完美的.例如,A 方案 ...

  5. 聊聊架构设计做些什么来谈如何成为架构师

    阅读目录 架构的定义 架构是做什么? 做架构的最佳实践 什么是好架构 如何成为架构师 结语 又有2周时间没冒泡了,最近实在没有大块的时间来写文章,就当找个理由... 也因为碎片化的时间多了,所以开始刷 ...

  6. 施行研发管理,顶层设计是第一步——研发管理自身的战略

    对于自主研发处于战略层面的技术型企业,研发管理也应该成为战略主题的一部分,从战略视角思考如何做好这部分工作,这是一个全盘性的工作,与普通或者局部的单纯项目管理有本质的区别,而且,项目管理只是研发管理体 ...

  7. 架构设计之非功能性需求

    非功能性需求 什么叫非功能性需求 非功能性需求为何与架构相关 值得注意 什么叫非功能性需求 非功能性需求包括性能.可修改性.可用性.易用性.复用性.环境要求等,在最初的需求方案分析阶段很容易被忽略,而 ...

  8. 【阿里架构设计思想】一线互联网系统的核心架构是什么样子的?淘宝系统架构演进之路

    学习架构设计思想 以一个网站为例: 网站一开始就是大型的吗? 我们一开始就设计一个大型网站吗? 不一定要做到很好,但一定要先做出来. 淘宝发展过程 第一版 一个无名小网站,没有太多人访问,一台服务器就 ...

  9. 系统架构设计_分布式、服务化的ERP系统架构设计

    我常说的一句话就是:互联网改变了我们的生活方式,也改变了我们的工作方式. To C 领域带来最显著变化的是以 BAT 为代表的各种应用,电商支付,通讯沟通,搜索出行等等,To B 领域最显著的变化则是 ...

最新文章

  1. 第三课 弹性盒模型知识点
  2. 亚马逊给警察局装备了人脸识别系统就万事大吉了?没那么容易
  3. 爬虫(一)jupyter环境安装
  4. 关于JUnit5 你必须知道的(一) JUnit5架构和环境搭建
  5. 微型计算机系统包括( )几部分,微型计算机系统包括哪几个部分?
  6. dart 乘方运算符_Dart系列-运算符
  7. mysql获取下一条自增的id_mysql获取一个表中的下一个自增(id)值的方法
  8. 最新软件工程总结,项目模板,软工作业下载
  9. ​Python中面向对象的编程
  10. debian搭建php mysql_Debian下MySQL安装经验分享
  11. 四旋翼双环PID控制
  12. 60-100-340-使用-DataSource-hive相关-Flink加载hive数据源
  13. @开发者,一文搞懂什么是 C# 计时器!|CSDN 博文精选
  14. Java中常用的正则表达式判断,如IP地址、电话号码、邮箱等
  15. 2.2使用urllib的简单传输
  16. spring mvc 提供的几个常用的扩展点
  17. 如果希望点击父控件子控件也响应的话, 可以给子控件加如下属性:  android:duplicateParentState=true...
  18. 【python爬虫】第11章——scrapy框架持久化存储
  19. android 触摸板 鼠标,您的Android手机或iPhone的光滑触摸屏面板可用于控制Mac OS上的鼠标指针...
  20. Rate Limiting速率限制

热门文章

  1. ios 部分string颜色_ios 设置字符串中某段字符的颜色
  2. 您的主机不满足在启用hyper-v或device_是时候换掉你的旧书桌了!乐歌E5M电动升降桌,坐立换姿不疲劳...
  3. vs code php html,vscode如何调试html
  4. 成为表情包大帝,仅需几十行python代码,简单易学
  5. 请求令牌 接口_时序图说明JWT用户认证及接口鉴权的细节
  6. 倒排索引原理_拜托,面试请不要再问我分布式搜索引擎的架构原理!
  7. 简单介绍python process模块
  8. JavaScript初学者编程题(25)
  9. 李超线段树(Li-Chao Segment Tree)
  10. 编译是检查C语言什么的错误,c语言编译过程