– 适用于Android, iOS 和 Win8 平台
一、概念与手艺
Sec-1. 框架设计之概念和技艺
1.1 概念
◆ 框架的起源、分层与其「无用之用」效果
◆ 框架与OS之关系:常见的问题
◆ 应用框架魅力的泉源:反向沟通技术
◆ 深入认识控制反转
◆ 主控者是框架,而不是应用程序
◆ 现代应用框架:采取广义IoC观念
◆ 框架的重要功能:提供预设行为
1.2 手艺
◆ 抽象(无之)与衍生(有之)
◆ 打造框架:细腻的抽象步骤
◆ 基本步骤
★ 细腻的手艺(一):数据抽象
★ 细腻的手艺(二):函数抽象
★ 细腻的手艺(三):将抽象类别转为接口(Interface)
◆ 以Android, iOS和Windows为例,说明黑箱式框架与白箱式框架之设计思维和技艺
1.3 图形表达
◆ UML的3种基本图表:类图、顺序图和用例图
◆ 以UML表达设计模式和框架
◆ EIT造形的两种表达:UML图和代码
二、分析方法
Sec-2. 行业概念(Concept)与用例(Use Case)分析方法
2.1 双插式分析
◆ 跌代(Iterative)过程
◆ 包含渐增(Incremental)模式
◆ 依循I&I和Use Case-Driven途径,以 EIT造形来表示接口
◆ 然后将EIT造形落实为类别和代码
2.2 业务规则(Business Rule)分析
◆ 随着<行业概念>分析和<业务规则>分析,得到更多的业务概念、类别和规则,就以前面所述的<平台&插件>关系来组织和重构
◆ 此架构模式,既能搭配敏捷开发,也能搭配RUP方法
2.3 范例
◆ 以五子棋和拉霸机游戏为例,进行分析演练
Sec-3. 框架接口(API)分析与设计方法
3.1 接口分析
◆ 基本设计技能:把轮胎拔掉
◆ 伟大的雕刻师罗丹( Musée Rodin)说:”把不必要的部分去掉”
◆ 买主需求:想想为什么(why)汽车架构师会决定把轮胎拔掉呢? 其背后的理由是:买主来了,才知道买主对轮胎的偏好或特殊需求。只有等到买主决定和挑选了轮胎之后,才能将轮胎装配上去。
◆ 探索买主需求
★ 为什么把轮胎拔掉呢?
★ 为什么火锅店的桌子要挖洞呢?
★ 为什么餐厅要分开<食谱>与<点菜单>呢?
3.2 接口设计
◆ 在OOP里,将接口定义为一种特殊的类别(Class)
◆ 在Java里,将”纯粹抽象类别”称为接口(Interface)
◆ EIT造形的接口表示为<I>;<I>可以合并到<E>里
◆ 被动型API与主动型API
3.3 接口与商业模式
◆ API决定控制权
◆ 谁拥用接口的制定权,谁就掌握控制点,就能获得较大的话语权
◆ 从API看控制力量的强弱等级
3.4 EIT造形(一):容易,插件容纳变化
◆ 什么是插件<T>?
◆ 插件(Plugin)的分类;插件与接口
◆ EIT造形里的插件<T>
3.5 EIT造形(二):结构制约,积极掌控插件
◆ 什么是接口<I>? 谁控制<I>?
◆ 接口的分类
◆ <I>决定控制权
3.6 EIT造形(三):组合创新,让整体<飞>起来
◆ 什么是平台<E>?
◆ <E>+<I> = 框架(Framework)
◆ <E>是控制点,透过<I>来驱动<T>
3.7 EIT造形(四):曹操类,协天子以令诸侯
◆ 拿EIT造形搭配Proxy-Stub设计模式,规划Stub类别(曹操类),制定自己的<I>,让<T>脱离上层<E&I>所牵制;实现”挟天子以令诸侯”的效果
3.8 范例
◆ 以五子棋和拉霸机游戏为例,进行接口设计演练
三、基础设计模式
Sec-4. 一般设计要点
4.1 复习设计样式
◆ 设计样式的意义、角色和起源
◆ 介绍常用的GoF软件设计样式
◆ 常见的设计样式应用情境
4.2 API = 话语权
◆ API与UI不同
◆ UI是App与用户的交互接口
◆ API则泛指软件模块间的接口,可分为:
★ SI:本架构与外部系统之间的接口
★ PI:本架构与内部挿件(Plug-in)之间的接口
★ 一般API:本架构与应用程序(App)之间的接口
◆ 掌握API定义权,就拥有话语权
4.3 应用框架 = 用来框住应用(App)的架构
◆ 框架的基本组成元素:EIT代码造形(Form)
◆ EIT造形的<I>就是API
◆ 框架是鱼饵,API是鱼钩
◆ 鱼饵是送人的礼物;送越多,拥有市场版图越大
4.4 框架(平台)调用App,不是App调用框架
◆ 用户并非直接碰触软件(App)
◆ App在软件架构里,其地位是最低的
◆ 例如,从移动终端发信息给云平台时,云端的IaaS层先接到信息;然后才(调用PaaS服务)来将信息往上送;再调用SaaS层服务来将信息送上去
4.5 从<C/S API>到<端/云API>
◆ API是分工的界线
◆ 过去,Client与Server是由不同团队分工开发的
◆ 今天,谷歌、Facebook、微信等,改变了API、改变了分工,如下图所示。
◆ 这称为跨<云&端>强龙企业
4.6 架构师做<分>的决策,开发者做<合>的任务
◆ 肯德基餐厅的厨师做:庖丁(分)解鸡
◆ 肯德基柜台人员则做:组(合)出全鸡、半鸡等套餐
◆ 分得妙、就合得快
◆ 分:无之以为用;合:有之以为利
◆ 因<分>而得接口(Interface),依据接口而快速组<合>
4.7 <分>的时间点:买主来到之刻
◆ 平台(Platform)设计者,必须重视买主,而不是用户
◆ 买主来到之前,先做分(即无之)
◆ 买主来了之刻,才做合(即有之)
4.8 没钱就改版,改版就有钱
◆ 拥有平台(Platform)者,常采取分层(Layered)架构,适合理的
◆ 过去,上层模快(开发者),常常要求下层必须稳定不变
◆ 今天,上层模块不能要求底层的稳定不变,而是要处处维护底层变动的自由度;这样才能实现:没钱就改版(底层),改版就有钱
四、进阶设计模式
Sec-5. 进阶设计要点:实例说明
5.1 平台 = 框架 + 引擎
◆ 古典:平台 = (服务)引擎
◆ 为了维护底层<引擎>的变动自由度,就采用新架构
◆ 于是,得出典型的Framework-based平台架构:
◆ 当今的.NET、iOS、Android平台都是这种架构
◆ App就是一种插件;应用层也是插件层
5.2 保护 <DB引擎> 的变动自由度
◆ 传统架构:降低引擎的变动自由度
◆ 优化架构:加上一个EIT造形
◆ EIT造形直接落实为类别(代码):
◆ 此架构的控制点在哪里? myDbHelper类别是谁开发的呢?
◆ 此EIT造形与Factory模式有何差异呢?
◆ EIT造形如何保护DB引擎的变动自由度呢?
◆ SQLite引擎可以”没钱就改版,改版就有钱”吗?
5.3 后台<业务规则(BR)引擎>的挿件架构
◆ 首先替引擎设计一个EIT造形,并将成长为框架
◆ 插件包括3种:App(用户)插件、业务(业主)插件和平台插件
◆ 当插件增多了,需要设计插件管理机制
◆ 看似复杂的架构,却只是3个EIT造形的巧妙组合而已
5.4 如何提供<插件接口>给Client
◆ 通常,后台的业务或平台插件的开发者,与Client开发者是不同的;而且开发的时间点也不一样(插件常开发在先)
◆ 那么,当Client需要调用插件时,后台如何提工插件接口给Client开发者呢?
◆ 即使Client端可以从文件中得知插件的接口,又如何调用呢?
◆ 首先,后台<E&I>提供一个通用型接口,内含一个通用型函数
◆ 然后,后台提供一个Proxy类别给Client
◆ 那么,又如何提供Proxy类别的代码给Client开发者呢?
Sec-6. 观摩框架设计技巧:实例说明
6.1 观摩Android应用框架的设计
◆ ListView框架范例解析
◆ SurfaceView框架范例解析
6.2 观摩iOS应用框架的API
◆ 解析AV框架的API设计
◆ 解析Social 框架的API设计
6.3 Android、iOS、Win8不同平台的需求和限制
◆ 如何开发Android上层的应用框架
◆ 如何开发Android底层的驱动框架
◆ 如何开发iOS的应用框架
◆ 如何开发Win8的应用框架
6.4 从未来性看这些框架的设计
◆ 目前决策的未来性
◆ 具有未来性的框架API设计
◆ Steve Jobs的名言:从未来回顾现在
五、落地策略与实战演练
Sec-7. 多层框架:如何在C/C++平台上建立Java框架
7.1 目的
◆ 让Client端开发者自己来撰写后台的插件
◆ 于是,后台成为一朵真正的云(Cloud)了
◆ 一个C/C++平台可以搭配多个不同语言的框架
7.2 做法:以Java为例
◆ 使用JNI(Java Native Interface)
◆ 例如,C/C++平台的<业务规则BR引擎>可以搭配一个Java框架
◆ 因为C/C++模块(如<业务规则引擎>)可以调用Java函数,所以C/C++平台仍然拥有主控权
7.3 也能用ANSI-C语言来设计框架
◆ 活用C语言函数指针(Function Pointer)
◆ 在C语言的struct结构内定义一个数据项(Data Item)¸ 并定义其型态(Type)是函数指针
◆ 这个struct结构相当于C++的抽象类别了,而函数指针数据项,就相当于是抽象函数了
◆ 于是,就可以撰写这个struct结构的”子类别”(或插件)了
Sec-8. 敏捷(Agile)框架开发方法
8.1 熟悉高老师的敏捷上层架构(框架)设计方法
◆ 认识敏捷开发的原则和价值观
◆ 以敏捷迭代产出云端的接口设计,也产出终端的接口设计
◆ 将两端的接口落实为EIT造形的程序代码
◆ 系统之间接口设计完成,展开终端的框架开发
◆ 继续进行敏捷迭代,开发终端框架的更多EIT造形
◆ 运用设计模式(Design Pattern),对EIT造形进行有机组合,成为框架
8.2 细说MCS模式和EIT造形的活用技巧
◆ MCS模式如何表达SOA、MDA、云端运算等其它系统架构
◆ 观摩各种常见的MCS模式系统架构
◆ 从减法设计思维来看MCS模式和EIT造形的运用
Sec-9. 情境体验式的分组研习和演练
9.1 选择自己(小组)的框架案例
◆ 案例要点说明
◆ 订定初步简单方案(Simple Solution)
★ 叙述愿景(Vision)
★ 订定基础架构策略
★ 订定基础需求
9.2 体验敏捷的迭代&回馈过程
◆ 基于上述简单方案,展开敏捷过程
◆ 准备TDD方案
◆ 启动迭代
9.3 运用xMCS模式,设计<云&端>整合架构
◆ 规划创新的业务情境
◆ 设计系统之间接口的沟通协议
◆ 叙述接口的详细规格
9.4 以EIT造形落实上述架构的接口
◆ 挑选适合的设计模式,包括:EIT造形、GoF等模式
◆ 减法设计:模式 + 自己的组合风格 = 系统架构
◆ 详细规范具有互通性的<系统接口>
◆ 以EIT造形的程序代码来实践<系统接口>
◆ 返回3.2继续迭代过程
9.5 体验两阶段敏捷的衔接
◆ 基于上述EIT造形程序代码为起始方案
◆ 启动<终端框架开发>的敏捷过程
◆ 增添一个业务功能
◆ 设计新功能的xMCS模式
◆ 撰写新功能的EIT造形代码
◆ 设计TDD方案持续进行迭代
9.6 进行框架整合测试
◆ 使用Android平台的测试框架
◆ 进行功能测试
◆ 善用Mock机制
9.7 各组成果报告
◆ 案例目标
◆ 创新、设计与实作过程
◆ 进行了那些减法设计、或加法设计
◆ 成功要点、或失败因素
~ end ~