Android从程序员到架构师之路V2ok1资料.docx

上传人:b****9 文档编号:25250327 上传时间:2023-06-06 格式:DOCX 页数:13 大小:22.99KB
下载 相关 举报
Android从程序员到架构师之路V2ok1资料.docx_第1页
第1页 / 共13页
Android从程序员到架构师之路V2ok1资料.docx_第2页
第2页 / 共13页
Android从程序员到架构师之路V2ok1资料.docx_第3页
第3页 / 共13页
Android从程序员到架构师之路V2ok1资料.docx_第4页
第4页 / 共13页
Android从程序员到架构师之路V2ok1资料.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Android从程序员到架构师之路V2ok1资料.docx

《Android从程序员到架构师之路V2ok1资料.docx》由会员分享,可在线阅读,更多相关《Android从程序员到架构师之路V2ok1资料.docx(13页珍藏版)》请在冰豆网上搜索。

Android从程序员到架构师之路V2ok1资料.docx

Android从程序员到架构师之路V2ok1资料

Android:

从程序员到架构师之路

By高焕堂

课程简介:

一般而言,人们大多先学开发(代码)的技术,随后才学(架构)设计的方法。

然而,在实际做事时,却是先设计,随后才写出代码来。

敏捷过程则让设计与写码迭代循环下去,一直到完成为止。

在本课程里,就遵循敏捷的迭代过程,从思想、方法、模式、范例和成功案例各种不同角度,带你学习从设计到代码的途径。

让你在活泼的过程中,轻松地从原本的代码世界,迅速熟悉设计的新天地。

在跃入架构设计新天地时,你很快会发现,架构设计的主要流派有二:

●抽象思维派:

致力于抽象出稳定、可靠、不变的共同性架构;亦即,追求<万变不离其宗>的宗。

●组合创新派:

致力于组合出具体独特性的创新架构;亦即,追求<与众不同>的特质。

在本课程里,将以后者(组合创新)为主轴,希望能陪伴你在移动互联网、智能终端的创新潮流中,能如鱼得水、展现无比的创造力。

此外,也会帮你建立扎实的抽象思维能力。

为了让你能顺利从(代码)开发跃升到(架构)设计,本课程会坚持一个美好的信念:

”各项架构设计决策都必须能迅速落实为代码”。

一方面符合敏捷的原则;另一方面,你可以从熟悉的代码中,领悟到其幕后的设计思想和技术。

例如,本课程也以Android开源的代码来阐述其幕后的UI、IPC、HAL等架构的设计思维和技巧。

为了特别强调架构与代码两者之间的无隙缝衔接,高焕堂老师特别设计了EIT代码造形,让组合创新派的设计核心:

接口(即EIT的)能直接落实到代码。

因之,EIT造形成为架构与代码的核心交汇点。

此外,在本课程里,将由高老师指导大家亲自进行架构设计,直接取得实务经验;例如,以移动互联网+智能家庭的情境,设计出手机与TV整合、多萤互动的新型系统架构,并迅速落实为可执行的框架代码。

并藉由成功案例分享来提供大量的实务设计模式,融合到框架的开发与API设计上,让学员在最短的时间内获得扎实的设计经验和技巧;往上应用于各行各业上。

 

课程大綱:

Part-1:

从架构到代码的过程

1.1敏捷与架构的完美组合

●敏捷开发的原则和价值观

●开发、架构、测试之关系

●架构在敏捷过程里的角色

●架构师在敏捷过程的职责

●过程观点:

(需求)测试做<反馈>,敏捷(过程)做<迭代>;

●分合观点:

(架构)设计做<分>,(代码)开发做<合>

●测试触发反馈,反馈带动迭代,迭代驱动<架构代码>重构

●迭代促进了<架构师&开发者>的心灵沟通与携手协作

●举例:

架构师如何设计敏捷的起始架构(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

●EIT造形的代表本架构

●EIT造形的代表本架构的配件(即插件:

Plug-in)

1.6一群美妙的组合是:

框架(Framework)

●认识GoF的设计模式(DesignPattern)

●随着敏捷的迭代过程,EIT造形会逐渐增加

●如何巧妙组合渐增的EIT造形:

擅用设计模式

●组合起来,就成为软件框架了

●如何迭成多层级(Layer)的框架体系:

以Android为例

Part-2:

从Android框架代码中学习设计

2.1基础设计模式(Pattern)的代码:

以Android为例

●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)

⏹以Android手机Browser为测试方案的执行软件

●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~

展开阅读全文
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1