大红鹰dhy最新网站|首页

服务热线:010-53345773
移动开发课程
当前位置: 大红鹰最新网站 > IT课程 > 移动开发课程
Android:从程序员到架构师之路
课程特色:
 <架构>与<敏捷>的完美组合
 各项<架构>设计都能迅速落实到<代码>
 以EIT代码造形衔接架构与代码
 以EIT的强力支持系统(或产品)的创新组合
 从原本的代码世界,迅速熟悉设计的新天地

课程大纲

                          主题                                                           内容

 

 

 

 

 

 

 

 

 

 

 

 

 

Part-1: 从架构到代码的过程

1.2  代码是架构的外貌,永远青春
 架构师与开发者的合作成果:架构+代码=软件(系统)
 架构是软件的骨架、代码是软件的外貌
 架构是软件的核心
 架构的用意:创新组<合>
 架构设计的焦点:接口(Interface)
 设计决策具有<未来性>,系统才能适应未来
1.3  设计与开发的分工合作
 架构设计的目的是:组合
 架构师做<分>,支持开发者做<合>,合作实践(系统)组合
 分得妙,就能合得快(即:分之以为用,合之以为利)
 分得妙,就能得好接口(Interface)
 架构师的核心工作:接口设计(Interface Design)
 开发者的核心工作:依据接口,开发(系统)模块并整合
 有许多种开发者:如App开发者、底层系统开发者等
1.4  敏捷思维:尽快呈现架构的外貌
 接口设计是<物>的组合设计
 接口设计是<事>的分工设计
 架构师设计多种接口来支撑分工与组合
 架构师心中的4种接口:SI、PI、API和UI
 SI:本架构与外部系统之间的整合接口
 PI:本架构与内部挿件(Plug-in)之间的接口
 API:本架构与应用程序(App)之间的接口
 UI:App与用户的互动接口
 依循敏捷原则,接口迅速落实为代码,尽快呈现外貌
1.5  EIT造形:接口美丽的外貌
 认识EIT软件造形
 EIT造形:呈现核心设计的外貌
 EIT造形的可涵盖三种:SI、PI、API
 EIT造形的代表本架构
 EIT造形的代表本架构的配件(即插件:Plug-in)
1.6  一群美妙的组合是:框架(Framework)
 认识GoF的设计模式(Design Pattern)
 随着敏捷的迭代过程,EIT造形会逐渐增加
 如何巧妙组合渐增的EIT造形:擅用设计模式
 组合起来,就成为软件框架了
 如何迭成多层级(Layer)的框架体系:以Android为例

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Part-2: 从Android框架代码中学习设计

2.1 基础设计模式(Pattern)的代码:以Android为例
 Template Method模式:IoC(控制反转)机制
 Observer模式:接口设计
 Abstract Factory模式:两个EIT造形的组合
 Adapter模式:封装接口
 Composite模式:实践组合
 Façade模式:组合体的接口设计
 EIT造形是原子,设计模式是分子
 更多EIT造形的组合模式:以Android代码为例
2.2  从 UI框架入手
 View体系的架构设计(使用Template Method模式)
 Activity-View的架构设计(使用Factory模式)
 Layout-View的架构设计(使用Composite模式)
 WMS(WindowManagerService)-View的架构设计
 WMS-SurfaceFlinger的架构设计
 Surface-Canvas(画布)的架构设计
 SurfaceView与OpenGL的3D绘图架构设计
 ListView框架的设计
2.3  跨进程(IPC)架构设计
 Android 的IPC幕后设计:BD(Binder Driver)驱动架构
 以IBinder接口包装BD驱动的服务
 包装IBinder接口的Proxy-Stub设计模式
 Proxy和Stub类别的代码
 设计Proxy和Stub类别的API
 如何自动生成Proxy和Stub类别代码
 IBinder & AIDL方法
 方法(一):Implementing a Binder
 方法(二):Using a Messenger
 方法(三):Bound Services
2.4  Java与C/C++两层框架的设计
 JNI(Java Native Interface)代码开发要点
 JNI的数据型态(Data Type)转换规则
 JNI的线程(Thread)模式:JNIENV类的设计
 正向通信:Java函数调用本地C函数
 反向通信:本地C函数调用Java函数
 Android HAL架构设计
  HAL(Hardware Abstraction Layer)的意义
  理解runtime与HAL Stub
  撰写HAL Stub代码
  Stub调用Linux Kernel的方法
2.5  核心服务的框架设计
 认识核心服务(Core Service)
 核心服务都是在开机过程中,由Android的INIT进程启动的
 包括Android Service和 Native Service两种
 以Java语言撰写的,就称为Android Service
 以C++撰写的,就称为Native Service
 亲自撰写一个核心服务
 撰写一个C++类别
 继承BBinder基类,继承得来IBinder界面
 提供接口给Java层(透过JNI)调用  
2.6  JUnit测试框架的设计
 Android的测试工具,都是基于JUnit测试框架的
 JUnit框架也是由许多EIT造形所组成;其TestCase基类是
 从基类衍生出各子类,如ServiceTestCase就是扩充的;其内涵的setUP()和tearDown()函数就是
 可撰写(即Test case)代码,来启动TDD机制
可使用TestSuite基类来管理一群相关的(即Test case)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Part-3: 梳理你的架构设计思想、方法和模式

式 3.1  复习设计概念与技艺
概念复习
 说明框架的起源、分层与其「无用之用」效果
 阐述应用框架魅力的泉源:控制反转(IoC, Inversion of Control)机制 
 深入认识控制反转机制 
 主控者是框架,而不是应用程序 
 现代应用框架:采取广义IoC观念 
 框架的重要功能:提供默认行为(Default Behavior)
技艺复习
 抽象(无之)与衍生(有之)
 打造框架:细腻的抽象步骤
 基本步骤:
 细腻的手艺(一):数据抽象
 细腻的手艺(二):函数抽象
 细腻的手艺(三):将抽象类别转为接口
 善用类的继承(Inheritance)机制
 设计基类的抽象函数
 抽象是手段,组合是目的
UML复习
 UML的3种基本图表:类图、顺序图和用例图
 以UML表达设计模式和框架
 EIT造形的两种表达:UML图和代码
3.2 架构设计的需求分析方法
 基本设计技能:把轮胎拔掉
 伟大的雕刻师罗丹( Musée Rodin)说:”把不必要的部分去掉”
 买主需求:想想为什么(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”
 愿景:多屏互动、幸福家庭的实践
 亮点:许多智能设备大量进入家庭,在家里的Android TV建立一朵私密云,来整合窗外多个云平台和手机移动终端,变得流行起来。
 情境:手机远距访问TV,透过TV打开家中的壁灯开关
 架构:基于<手机+TV>的大小机相联、大小屏幕互动的新架构
 设计:设计TV里的框架、撰写插件
 技术:
 在外的家庭成员透过手机浏览器(Browser)上网访问家庭云,您可以在家庭云里,安装一个i-Jetty网页容器(Web Container)
 此时,I-Jetty里的HttpServlet就是另一个,而它的doGet()等函数就是
 您写的servlet代码就是I-Jetty的,它接受手机的访问

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.2 实际开发:依循敏捷、落实为代码

<架构设计>阶段的敏捷迭代
 Step-0. 准备测试计划
 订定此阶段的测试方案(Test Case)
 以Android手机Browser为测试方案的执行软件
 Step-1. 设计敏捷过程的起点架构:Simple Solution
 通信协议:手机与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. 依循测试方案,展开细节设计和代码开发
 撰写Android App代码:基于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.3 Android版本(大)平台:采取<策略-2>
 Android升级和版本变更频繁,终端必须随之而更新
 Android是一个多层级结构,各层都是由Google所开发,Google是强龙,位居天子角色,其设计来控制您的插件
 您可以拿EIT造形搭配Proxy-Stub设计模式,规划Stub类别(曹操类),制定自己的,让脱离Android的所牵制;实现”挟天子以令诸侯”的效果
5.4  跨自己的平台(建立中间件):采取<策略-3>
 随着您的公司业务成长,您的平台版本变更频繁;如何包容自己平台的变化呢?
 您可以规划一个上层平台来吸纳自己平台的变化
 此平台又称为中间件,其提供稳定的(又称API),也保护自己平台的变动自由度,实现”没钱就改版,改版就有钱”的效果
 中间件还能提供您的专有API,来凸显自己平台的独特性

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Part-6:  架构设计的成功案例分享

6.1  案例:重构PhoneGap的架构和代码
 议题:PhoneGap目前只搭配HTML5的Web App
 如何重构PhoneGap的架构和代码
 让PhoneGap也能搭配一般的Native App
 现况:目前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造形去观察架构
 技巧:从观察重构的变动震幅,找出上上之策
 启示:优越架构,带来易于重构的机会,创造了系统未来性


 

 

Baidu
sogou