By 高焕堂 2011/09/04
[ IT史上最完整、最经典的软件框架开发技术宝典 (上百篇经典文章&eBooks) ]
[Go Back]
1. 最简方案(Simplest Solution)
「敏捷宣言」包含4项原则:
1. 人员交流重于过程和工具
2. 客户协作重于合同谈判
3. 可用软件重于完备文件
4. 包容改变重于遵循计划
从这4项原则而衍生出敏捷开发过程的概念:
◆ 最简方案(Simplest solution)
◆ 迭代过程(Iterative process)
◆ 重构(Re-factoring)
◆ 持续整合(Continuous integration)
图-1、敏捷迭代过程(一)
图-2、敏捷迭代过程(二)
依循敏捷过程,以测试驱动(TDD, Test-Driven Development)引导出持续地反馈(Feedback)与迭代(Iteration)的软件开发过程。基于愿景而设计足够好(Good Enough)的简单方案,做为基础,尽快将设计落实成为代码;然后以需求来进行检测,将测试结果反馈回来,修正和重构设计和代码,持续迭代循环下去。
2. 架构师的角色
聆听Fred George怎么说
◎ “As an architect, I will implement the most difficult parts of a system.”
(身为架构师,我先实现系统里最艰难的部分。)
◎ “I call it "pioneering", the process where I see if an idea in my head actually is a good idea.” (我称它为”先验过程”,这过程检视我的设计理念是否足够好。)
◎ “I will always refine the idea in that first implementation. Then I feel comfortable letting the rest of the programming team follow that pattern. That is the architecture.”
(在这先验过程的实践中,我会不断修正设计里念,直到有了感觉足够好的设计模式。然后才让开发团队跟进;这项设计模式就是系统架构了。)
从Fred George得到的启示
◎ Simple solution是足够好的架构,它也是来自迭代过程(“Always refine …”)。
◎ 架构师在设计出simple solution时,已经进行了无数次心智内的敏捷迭代了。
◎ 架构设计也需要敏捷迭代。架构设计本身若不敏捷,又如何支撑敏捷开发呢?
图-3、架构设计的敏捷迭代过程
反思传统视角:以不变应万变
◎ 传统架构设计视角偏于抽象思维,致力于抽象出稳定、可靠、不变的共同性架构;做为应用发展的基础。
◎ 然而,这项稳定架构无法迅速得到,不是“足够好”而已,这违背敏捷的Simple Solution的要求,不易迅速推动敏捷迭代。
取得新视角:敏捷求新求变
◎ 新视角:师法自然;基于简单造形,组合出复杂。
◎ 就像一个DNA螺旋形的结构,可以由相同造形(Form)的小单位组成;再者,每一个小单位所插入的方式,与别的小单位一模一样。只要你一旦明白一个DNA结构的组成形式,便可掌握整体了。
图-4、DNA螺旋形的结构
基于造形,进行创新组合
- 造形特性:形式简单、内涵复杂、重复组合
- 造形范例:物理原子(Atom)、唐诗七言绝句之形
- 造形与内涵:例如,物理原子(Atom)
图-5、造形与内涵
图-6、就像氢、氧原子(造形)组合成为水分子
4. 软件架构设计的基本造形:以EIT代码造形为例
不仅仅自然界有造形,像唐诗七言绝句之形也是。此外,软件产业也富有许多造形;就以高老师提倡的EIT代码造形为例。如下图:
图-7、软件的EIT代码造形
软件造形特性,与自然界造形一样,具备三项特性:
- 形式简单
- 内涵复杂
- 重复组合。
EIT造形能容纳各种内涵。例如,利用EIT造形来容纳善变的“通信协议”,如下图:
图-8、将特殊内含装入EIT造形里
5. 抽换EIT造形里的内涵:以SurfaceView框架为例
基于EIT造形,就很容易联想的如何使用SurfaceView框架,来与Camera进行组合,做出具有未来性的设计。
图-9、EIT造形容纳了”拍照片”的内涵
一旦SurfaceView与Camera两者变成为疏结合(Loosely Coupled)关系了,当业主在稍后出现时,就能做弹性的组合了。例如,所以,在EIT造形的概念下,我们很容易联想到,可委托开发者把护士站的Android TV/STB联接到医院加护病房的仪器设备上。如下图所示:
图10、随时抽换其内涵,造形仍然不变
由于EIT造形的<简单性>,让人们能拥有能力来面对复杂多变的需求。从图4和图5可以看出,目前Android的SurfaceView框架幕后就是一个EIT造形。基于高焕堂老师提出的简单”EIT软件造形”,你就能容易理解Android多层框架体系里的复杂关系。有了架构设计造形的<简单性>,你就提升了掌握软件系统<复杂性>的能力;同时,基于对EIT用途的熟悉,你也能轻易联想到SurfaceView的更多用途了。◆