从程序员到架构师之路文档格式.docx
- 文档编号:16791565
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:11
- 大小:23.02KB
从程序员到架构师之路文档格式.docx
《从程序员到架构师之路文档格式.docx》由会员分享,可在线阅读,更多相关《从程序员到架构师之路文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
迭代>
;
●分合观点:
(架构)设计做<
分>
,(代码)开发做<
合>
●测试触发反馈,反馈带动迭代,迭代驱动<
架构代码>
重构
●迭代促进了<
架构师&
开发者>
的心灵沟通与携手协作
●举例:
架构师如何设计敏捷的起始架构(SimpleSolution)
⏹加法设计:
围绕问题(Problem)和愿景(Vision),
产生创意构想(CreativeIdea)
⏹减法设计:
创意爱上限制(Creativitylovesconstraint)
1.2代码是架构的外貌,永远青春
●架构师与开发者的合作成果:
架构+代码=软件(系统)
●架构是软件的骨架、代码是软件的外貌
●架构是软件的核心
●架构的用意:
创新组<
●架构设计的焦点:
接口(Interface)
●设计决策具有<
未来性>
,系统才能适应未来
1.3设计与开发的分工合作
●架构设计的目的是:
组合
●架构师做<
,支持开发者做<
,合作实践(系统)组合
●分得妙,就能合得快(即:
分之以为用,合之以为利)
●分得妙,就能得好接口(Interface)
●架构师的核心工作:
接口设计(InterfaceDesign)
●开发者的核心工作:
依据接口,开发(系统)模块并整合
●有许多种开发者:
如App开发者、底层系统开发者等
1.4敏捷思维:
尽快呈现架构的外貌
●接口设计是<
物>
的组合设计
事>
的分工设计
●架构师设计多种接口来支撑分工与组合
●架构师心中的4种接口:
SI、PI、API和UI
⏹SI:
本架构与外部系统之间的整合接口
⏹PI:
本架构与内部挿件(Plug-in)之间的接口
⏹API:
本架构与应用程序(App)之间的接口
⏹UI:
App与用户的互动接口
●依循敏捷原则,接口迅速落实为代码,尽快呈现外貌
1.5EIT造形:
接口美丽的外貌
●认识EIT软件造形
●EIT造形:
呈现核心设计的外貌
●EIT造形的<
可涵盖三种:
SI、PI、API
E>
代表本架构
T>
代表本架构的配件(即插件:
Plug-in)
1.6一群<
E&
美妙的组合是:
框架(Framework)
●认识GoF的设计模式(DesignPattern)
●随着敏捷的迭代过程,EIT造形会逐渐增加
●如何巧妙组合渐增的EIT造形:
擅用设计模式
●组合起来,就成为软件框架了
●如何迭成多层级(Layer)的框架体系:
以Android为例
Part-2:
从Android框架代码中学习设计
2.1基础设计模式(Pattern)的代码:
●TemplateMethod模式:
IoC(控制反转)机制
●Observer模式:
接口设计
●AbstractFactory模式:
两个EIT造形的组合
●Adapter模式:
封装接口
●Composite模式:
实践组合
●Faç
ade模式:
组合体的接口设计
●EIT造形是原子,设计模式是分子
●更多EIT造形的组合模式:
以Android代码为例
2.2从UI框架入手
●View体系的架构设计(使用TemplateMethod模式)
●Activity-View的架构设计(使用Factory模式)
●Layout-View的架构设计(使用Composite模式)
●WMS(WindowManagerService)-View的架构设计
●WMS-SurfaceFlinger的架构设计
●Surface-Canvas(画布)的架构设计
●SurfaceView与OpenGL的3D绘图架构设计
●ListView框架的设计
2.3跨进程(IPC)架构设计
●Android的IPC幕后设计:
BD(BinderDriver)驱动架构
●以IBinder接口包装BD驱动的服务
●包装IBinder接口的Proxy-Stub设计模式
●Proxy和Stub类别的代码
●设计Proxy和Stub类别的API
●如何自动生成Proxy和Stub类别代码
●IBinder&
AIDL方法
⏹方法
(一):
ImplementingaBinder
⏹方法
(二):
UsingaMessenger
⏹方法(三):
BoundServices
2.4Java与C/C++两层框架的设计
●JNI(JavaNativeInterface)代码开发要点
●JNI的数据型态(DataType)转换规则
●JNI的线程(Thread)模式:
JNIENV类的设计
●正向通信:
Java函数调用本地C函数
●反向通信:
本地C函数调用Java函数
●AndroidHAL架构设计
⏹HAL(HardwareAbstractionLayer)的意义
⏹理解runtime与HALStub
⏹撰写HALStub代码
⏹Stub调用LinuxKernel的方法
2.5核心服务的框架设计
●认识核心服务(CoreService)
⏹核心服务都是在开机过程中,由Android的INIT进程启动的
⏹包括AndroidService和NativeService两种
⏹以Java语言撰写的,就称为AndroidService
⏹以C++撰写的,就称为NativeService
●亲自撰写一个核心服务
⏹撰写一个C++类别
⏹继承BBinder基类,继承得来IBinder界面
⏹提供接口给Java层(透过JNI)调用
2.6JUnit测试框架的设计
●Android的测试工具,都是基于JUnit测试框架的
●JUnit框架也是由许多EIT造形所组成;
其TestCase基类是<
●从基类衍生出各子类,如ServiceTestCase就是扩充的<
其内涵的setUP()和tearDown()函数就是<
●可撰写<
(即Testcase)代码,来启动TDD机制
●可使用TestSuite基类来管理一群相关的<
(即Testcase)
Part-3:
梳理你的架构设计思想、方法和模式
3.1复习设计概念与技艺
概念复习
●说明框架的起源、分层与其「无用之用」效果
●阐述应用框架魅力的泉源:
控制反转(IoC,InversionofControl)机制
●深入认识控制反转机制
●主控者是框架,而不是应用程序
●现代应用框架:
采取广义IoC观念
●框架的重要功能:
提供默认行为(DefaultBehavior)
技艺复习
●抽象(无之)与衍生(有之)
●打造框架:
细腻的抽象步骤
●基本步骤:
⏹细腻的手艺
(一):
数据抽象
⏹细腻的手艺
(二):
函数抽象
⏹细腻的手艺(三):
将抽象类别转为接口
●善用类的继承(Inheritance)机制
●设计基类的抽象函数
●抽象是手段,组合是目的
UML复习
●UML的3种基本图表:
类图、顺序图和用例图
●以UML表达设计模式和框架
●EIT造形的两种表达:
UML图和代码
3.2架构设计的需求分析方法
●基本设计技能:
把轮胎拔掉
●伟大的雕刻师罗丹(Musé
eRodin)说:
”把不必要的部分去掉”
●买主需求:
想想为什么(why)汽车架构师会决定把轮胎拔掉呢?
其背后的理由是:
买主来了,才知道买主对轮胎的偏好或特殊需求。
只有等到买主决定和挑选了轮胎之后,才能将轮胎装配上去。
●探索买主需求
⏹为什么把轮胎拔掉呢?
⏹为什么火锅店的桌子要挖洞呢?
⏹为什么餐厅要分开<
食谱>
与<
点菜单>
呢?
3.3接口设计模式
什么是接口(Interface)
●在OOP里,将接口定义为一种特殊的类别(Class)
●在Java里,将”纯粹抽象类别”称为接口(Interface)
●EIT造形的接口表示为<
●<
可以合并到<
里
谁控制<
?
成为控制点
●引擎<
<
驱动轮胎<
如何控制API?
●UI与API
●被动型API与主动型API
API与商业模式
●API决定控制权&
金流
●没钱就改版,改版就有钱
●以HAL为例,说明API=话语权
●谁拥用接口的制定权,谁就掌握控制点,就能获得较大的话语权
●从API看控制力量的强弱等级
●把控制力传播出去
Part-4:
亲自<
敏捷+架构>
、并迭代出代码
4.1情境范例:
”手机访问TV/STB”
●愿景:
多屏互动、幸福家庭的实践
●亮点:
许多智能设备大量进入家庭,在家里的AndroidTV建立一朵私密云,来整合窗外多个云平台和手机移动终端,变得流行起来。
●情境:
手机远距访问TV,透过TV打开家中的壁灯开关
●架构:
基于<
手机+TV>
的大小机相联、大小屏幕互动的新架构
●设计:
设计TV里的框架<
、撰写插件<
●技术:
⏹在外的家庭成员透过手机浏览器(Browser)上网访问家庭云,您可以在家庭云里,安装一个i-Jetty网页容器(WebContainer)
⏹此时,I-Jetty里的HttpServlet就是另一个<
,而它的doGet()等函数就是<
⏹您写的servlet代码就是I-Jetty的<
,它接受手机的访问
4.2实际开发:
依循敏捷、落实为代码
<
架构设计>
阶段的敏捷迭代
●Step-0.准备测试计划
⏹订定此阶段的测试方案(TestCase)
⏹以Android手机Browser为测试方案的执行软件
●Step-1.设计敏捷过程的起点架构:
SimpleSolution
⏹通信协议:
手机与TV采HTTP通信
⏹软件接口:
TV端的EIT造形与手机端Browser对接
⏹设计:
以UML表达EIT造形
⏹代码:
赚写I-Jetty的Servlet来实践EIT造形
●Step-2.启动TDD机制、进行迭代
⏹从手机来实机检测TV里的EIT造形的接口代码
⏹依循TDD的反馈,迭代Step-1和Step-2的活动
代码开发>
●Step-3.准备测试计划
⏹订定此阶段的测试方案:
基于用户需求(Requirements)
●Step-4.以上阶段Step-2产出的EIT造形为起点架构
●Step-5.依循测试方案,展开细节设计和代码开发
⏹撰写AndroidApp代码:
基于Android应用框架
⏹I-Jetty的<
调用Android的App
⏹App透过JNI调用Android的Zigbee驱动代码
⏹Zigbee驱动透过Dongle发信号给壁灯开关
●Step-6.启动TDD机制、进行迭代
⏹从手机来实机检测TV里的有关代码
⏹依循TDD的反馈,迭代Step-5和Step-6的活动,直到完成
4.3继续敏捷迭代、开发新功能
新功能1:
手机控制TV里的Camera拍照片
●TV/STB内的i-Jetty含有servlet代码,让手机可以远距来访问它
●TV/STB则内含Camera驱动,能控制摄像头硬件
●运用EIT造形和敏捷迭代,开发软件来整合家外的手机与TV/STB上的摄像头硬件,让家庭成员随时从手机来打开TV/STB的摄像头,拍了照片送回到手机上呈现出来
●展开敏捷过程,直到完成
新功能2:
手机控制TV将照片送上云端(Cloud)
●TV/STB将Camera拍摄的照片送上云端:
例如Google的GAE等
●基于WiFi通信协议
Part-5:
架构设计应用:
支持跨平台
5.1三个架构设计策略
●三个实施策略:
⏹策略-1:
把它”EIT(设计)”了
⏹策略-2:
挟天子以令诸侯
⏹策略-3:
建立中间件(middleware)
5.2跨芯片(小)平台:
采取<
策略-1>
情境A:
先有别人的(小)平台,然后才建立我的平台
●小平台是指别人的平台,该平台的变化决定于别人
●为了跨平台,就不宜直接使用别人的平台
●您设计<
,而且设计<
来包容别人平台的变化,这就称为:
把它”EIT(设计)”了。
情境B:
先建立我的平台,然后才让别人来扩充(Extend)
●这反过来,让别人设计插件<
来扩充(extend)您的<
●别人为了保护他自己,也会将插件分成两部分:
壁虎尾巴>
壁虎身体>
●万一您的<
有变化时,这只壁虎(插件)便能弃尾求生,让<
跨您的<
5.3Android版本(大)平台:
策略-2>
●Android升级和版本变更频繁,终端必须随之而更新
●Android是一个多层级<
结构,各层都是由Google所开发,Google是强龙,位居天子角色,其设计<
来控制您的插件<
●您可以拿EIT造形搭配Proxy-Stub设计模式,规划Stub类别(曹操类),制定自己的<
,让<
脱离Android的<
所牵制;
实现”挟天子以令诸侯”的效果
5.4跨自己的平台(建立中间件):
策略-3>
●随着您的公司业务成长,您的平台版本变更频繁;
如何包容自己平台的变化呢?
●您可以规划一个上层平台<
来吸纳自己平台的变化
●此平台又称为中间件,其提供稳定的<
(又称API),也保护自己平台的变动自由度,实现”没钱就改版,改版就有钱”的效果
●中间件还能提供您的专有API,来凸显自己平台的独特性
Part-6:
架构设计的成功案例分享
6.1案例:
重构PhoneGap的架构和代码
●议题:
PhoneGap目前只搭配HTML5的WebApp
⏹如何重构PhoneGap的架构和代码
⏹让PhoneGap也能搭配一般的NativeApp
●现况:
目前PhoneGap的架构设计
⏹HTML5&
PhoneGap可以让UI更容易跨平台
⏹其依赖Browser和PhoneGap的插件<
来吸收平台的差异化
⏹如果插件很多时,PhoneGap里的PluginManager负责管理之
⏹UI事件是从WebView传送到PhoneGap的插件<
●目标:
⏹即使不采用HTML5,也能使用PhoneGap来管里插件
⏹一旦不使用HTML5,PhoneGap就不再搭配WebView
⏹于是,PhoneGap转而搭配一般的View,如Button等
⏹UI事件(Event)改从一般的传送到PhoneGap的插件<
●收获:
⏹如何拦截App的启动事件(onCreate事件)和UI事件
⏹以EIT造形加快理解PhoneGap框架的结构
⏹深刻领悟<
的设计要领:
如IPlugin接口设计
⏹熟悉从<
重构设计>
到<
重构代码>
的过程
6.2重构的设计思考
●重构范围内共有3个EIT造形的美妙组合
⏹第1个造形:
{Activity-DroidGap}
⏹第2个造形:
{WebView-CodavaWebView}
⏹第3个造形:
{PluginManager-Plugin-<
}
●因为不再搭配WebView,所以前两个EIT造形都必须重构
●第3个造形最复杂
●上上策是:
不重构第3个造形,其内涵和接口代码都保持不变
●成功地让第3个造形跨到重构的新平台(即前两个造形)
6.3案例的成功关键和启示
●关键:
在于上述的设计思考
●洞悉:
心怀EIT造形去观察架构
●技巧:
从<
观察重构的变动震幅,找出上上之策
●启示:
优越架构,带来易于重构的机会,创造了系统未来性
~end~
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序员 架构