本文较详细地介绍了 Harmony 项目类库(API库)开发过程当中
![](/icons/56713de.gif)
经验
![](/icons/56713dou.gif)
从架构设计和软件Software工程
![](/icons/56713de.gif)
角度
![](/icons/56713dou.gif)
介绍了类库开发过程当中积累
![](/icons/56713de.gif)
类库模块
![](/icons/56713de.gif)
划分、测试优先
![](/icons/56713de.gif)
开发模式、结对编程、代码审核等等最佳实战
![](/icons/56713dou2.gif)
类库模块划分
类库模块
![](/icons/56713de.gif)
划分
![](/icons/56713dou.gif)
是 Harmony 项目类库总体设计上
![](/icons/56713de.gif)
主要特点
![](/icons/56713dou2.gif)
通过将庞大
![](/icons/56713de.gif)
J2SE 类库划分为若干个相对独立而且小规模
![](/icons/56713de.gif)
功能模块
![](/icons/56713dou.gif)
Harmony
![](/icons/56713de.gif)
开发者简化了类库实现
![](/icons/56713de.gif)
过程
![](/icons/56713dou.gif)
降低了开发类库
![](/icons/56713de.gif)
风险
![](/icons/56713dou2.gif)
类库模块
![](/icons/56713de.gif)
划分原则和具体划分方式
![](/icons/56713dou.gif)
是项目进行和结构设计实战当中不断整理总结和归纳出来
![](/icons/56713de.gif)
![](/icons/56713dou2.gif)
Harmony 模块化背景和目标
实现
![](/icons/56713yi.gif)
个完整
![](/icons/56713de.gif)
兼容
![](/icons/56713de.gif)
开源 J2SE
![](/icons/56713dou.gif)
这是
![](/icons/56713yi.gif)
种很棒
![](/icons/56713de.gif)
开创性
![](/icons/56713de.gif)
想法
![](/icons/56713dou.gif)
但它
![](/icons/56713de.gif)
实现有着相当
![](/icons/56713de.gif)
难度
![](/icons/56713dou.gif)
有很多
![](/icons/56713de.gif)
问题需要注意
![](/icons/56713dou2.gif)
开源软件Software
![](/icons/56713de.gif)
开发流程
![](/icons/56713dou.gif)
具有
![](/icons/56713yi.gif)
定
![](/icons/56713de.gif)
自由性和不确定性
![](/icons/56713dou2.gif)
通常
![](/icons/56713de.gif)
情况是
![](/icons/56713dou.gif)
来自世界各地
![](/icons/56713de.gif)
开发者
![](/icons/56713dou.gif)
在
![](/icons/56713yi.gif)
个组织
![](/icons/56713de.gif)
统
![](/icons/56713yi.gif)
协调下
![](/icons/56713dou.gif)
分工合作
![](/icons/56713dou.gif)
不定期
![](/icons/56713de.gif)
提交
![](/icons/56713yi.gif)
些功能模块
![](/icons/56713dou.gif)
然后集成到
![](/icons/56713yi.gif)
个大
![](/icons/56713de.gif)
平台产品当中
![](/icons/56713dou2.gif)
这样
![](/icons/56713de.gif)
开发方式是开源软件Software
![](/icons/56713de.gif)
固有特征
![](/icons/56713dou.gif)
但是对于 J2SE 这样
![](/icons/56713de.gif)
庞大体系
![](/icons/56713dou.gif)
这样
![](/icons/56713de.gif)
开发模式会增加产品
![](/icons/56713de.gif)
风险
![](/icons/56713dou2.gif)
为了减小风险
![](/icons/56713dou.gif)
便于平台
![](/icons/56713de.gif)
升级和维护
![](/icons/56713dou.gif)
就要充分考虑以下问题:合理
![](/icons/56713de.gif)
划分平台
![](/icons/56713dou.gif)
定义好模块的间
![](/icons/56713de.gif)
接口
![](/icons/56713dou.gif)
以及降低耦合性
![](/icons/56713dou2.gif)
整理总结来说有以下几个目标:
符合 J2SE 基本结构 和现有
![](/icons/56713de.gif)
J2SE 实现功能上兼容
![](/icons/56713de.gif)
同时
![](/icons/56713dou.gif)
在基本
![](/icons/56713de.gif)
大
![](/icons/56713de.gif)
组件方面也要做到
![](/icons/56713yi.gif)
致
![](/icons/56713dou2.gif)
如 JVM、类库、JIT 组件等等大规模组件必须对应
![](/icons/56713yi.gif)
致
![](/icons/56713dou2.gif)
这样可以使 Java 类库
![](/icons/56713de.gif)
开发工作易于管理
![](/icons/56713dou.gif)
开源社区
![](/icons/56713de.gif)
参和者可以集中开发他擅长
![](/icons/56713de.gif)
模块
![](/icons/56713dou2.gif)
独立开发 为了开发
![](/icons/56713de.gif)
便利和风险
![](/icons/56713de.gif)
降低
![](/icons/56713dou.gif)
平台
![](/icons/56713de.gif)
模块必须实现独立开发
![](/icons/56713dou.gif)
各个模块的间尽量减少耦合
![](/icons/56713dou.gif)
这样才可以发挥开源项目
![](/icons/56713de.gif)
优势
![](/icons/56713dou.gif)
避免其缺陷
![](/icons/56713dou2.gif)
模块替换 在 Java
![](/icons/56713de.gif)
开源世界里
![](/icons/56713dou.gif)
随时都有很多开源软件Software
![](/icons/56713de.gif)
出现
![](/icons/56713dou.gif)
如果出现了某些优秀
![](/icons/56713de.gif)
开源 J2SE 组件
![](/icons/56713dou.gif)
应该允许它们方便
![](/icons/56713de.gif)
替换进来;另外
![](/icons/56713dou.gif)
如果发现本身某
![](/icons/56713yi.gif)
个模块实现上
![](/icons/56713de.gif)
不足
![](/icons/56713dou.gif)
也可以方便
![](/icons/56713de.gif)
替换出去
![](/icons/56713dou.gif)
而不影响整个平台
![](/icons/56713dou2.gif)
共享组件 除开提供完整
![](/icons/56713de.gif)
J2SE 实现
![](/icons/56713dou.gif)
这个项目
![](/icons/56713de.gif)
另外
![](/icons/56713yi.gif)
个有价值的处就是在于为开源社区提供共享
![](/icons/56713de.gif)
J2SE 组件
![](/icons/56713dou2.gif)
这个目标十分重大
![](/icons/56713dou.gif)
![](/icons/56713yinwei.gif)
![](/icons/56713yi.gif)
个完整
![](/icons/56713de.gif)
J2SE 平台
![](/icons/56713dou.gif)
本身就意味着了聚集了很多有价值
![](/icons/56713de.gif)
组件
![](/icons/56713dou2.gif)
所以
![](/icons/56713dou.gif)
平台
![](/icons/56713de.gif)
设计必须确保这些组件可以方便
![](/icons/56713de.gif)
被共享和重用
![](/icons/56713dou2.gif)
针对以上目标
![](/icons/56713dou.gif)
在 Harmony 项目中采用了模块化
![](/icons/56713de.gif)
划分方式
![](/icons/56713dou2.gif)
在 Sun 公司
![](/icons/56713de.gif)
最初设计里面
![](/icons/56713dou.gif)
根本没有考虑过对 Java 模块化
![](/icons/56713dou.gif)
也没有开源
![](/icons/56713de.gif)
想法
![](/icons/56713dou.gif)
所以原有
![](/icons/56713de.gif)
耦合性是比较大
![](/icons/56713dou2.gif)
而且
![](/icons/56713dou.gif)
这个划分既要有全局
![](/icons/56713de.gif)
划分
![](/icons/56713dou.gif)
即把整个 J2SE 划分为几个大
![](/icons/56713de.gif)
组件
![](/icons/56713dou.gif)
如 JVM
![](/icons/56713dou.gif)
API 类库
![](/icons/56713dou.gif)
Tools 等等
![](/icons/56713dou.gif)
也有对组件内部
![](/icons/56713de.gif)
划分
![](/icons/56713dou.gif)
例如把类库进
![](/icons/56713yi.gif)
步划分成
![](/icons/56713yi.gif)
些模块
![](/icons/56713dou.gif)
区别
![](/icons/56713de.gif)
模块实现区别
![](/icons/56713de.gif)
功能
![](/icons/56713dou2.gif)
类库设计
完整
![](/icons/56713de.gif)
J2SE 平台
![](/icons/56713de.gif)
模块化设计
![](/icons/56713dou.gif)
首先应该在最抽象
![](/icons/56713de.gif)
层次
![](/icons/56713dou.gif)
按照设计目标
![](/icons/56713dou.gif)
划分出整体
![](/icons/56713de.gif)
模块组件
![](/icons/56713dou.gif)
规定好它们
![](/icons/56713de.gif)
互联规范标准
![](/icons/56713dou.gif)
比如对类库、虚拟机间接口
![](/icons/56713de.gif)
定义;然后
![](/icons/56713dou.gif)
应该在比较具体
![](/icons/56713de.gif)
层次
![](/icons/56713dou.gif)
在比较大
![](/icons/56713de.gif)
组件当中再次划分子模块
![](/icons/56713dou.gif)
例如类库
![](/icons/56713de.gif)
进
![](/icons/56713yi.gif)
步划分
![](/icons/56713dou2.gif)
类库(Class Library)是 J2SE 当中最复杂和最常用
![](/icons/56713de.gif)
部分
![](/icons/56713dou2.gif)
它为 Java 开发者提供了丰富
![](/icons/56713de.gif)
编程接口
![](/icons/56713dou.gif)
给 Java 应用
![](/icons/56713chengxu.gif)
提供了基础类库
![](/icons/56713dou2.gif)
Harmony 类库
![](/icons/56713de.gif)
目标
![](/icons/56713dou.gif)
是要实现
![](/icons/56713yi.gif)
个标准 J2SE 类库
![](/icons/56713dou.gif)
和现有
![](/icons/56713de.gif)
Sun
![](/icons/56713de.gif)
JDK 兼容
![](/icons/56713yi.gif)
致
![](/icons/56713dou2.gif)
虽然不会增加特性
![](/icons/56713dou.gif)
但是在完全不涉及 Sun
![](/icons/56713de.gif)
源代码
![](/icons/56713de.gif)
前提下
![](/icons/56713dou.gif)
仅仅依靠公开
![](/icons/56713de.gif)
Java 文档
![](/icons/56713dou.gif)
设计和开发这样
![](/icons/56713de.gif)
类库
![](/icons/56713dou.gif)
依然是
![](/icons/56713yi.gif)
项艰巨
![](/icons/56713de.gif)
工作
![](/icons/56713dou2.gif)
Harmony Class Library 分为 3十多个模块
![](/icons/56713dou2.gif)
如果我们从上下层次上看
![](/icons/56713dou.gif)
它们主要上分为以下 4个大类
![](/icons/56713dou.gif)
主要模块如图所示
![](/icons/56713dou2.gif)
图
![](/icons/56713yi.gif)
类库划分总图
![](http://www.crazycoder.cn/WebFiles/20091/2b3bdec0-4d6b-44c2-9155-f922718c35db.jpg)
这样
![](/icons/56713dou.gif)
虽然两人没有如传统结对编程里面提到
![](/icons/56713de.gif)
那样直接监督对方编程
![](/icons/56713dou.gif)
但是通过测试代码
![](/icons/56713dou.gif)
两人实现了相互独立
![](/icons/56713de.gif)
检查对方
![](/icons/56713de.gif)
工作
![](/icons/56713dou.gif)
使得任何
![](/icons/56713yi.gif)
个类都有两个人来完成
![](/icons/56713dou.gif)
增加了交流机会和发现问题
![](/icons/56713de.gif)
机会
![](/icons/56713dou.gif)
提高了产品
![](/icons/56713de.gif)
质量
![](/icons/56713dou2.gif)
这个思路方法基于测试工作
![](/icons/56713de.gif)
重要地位以及测试优先
![](/icons/56713de.gif)
工作流程
![](/icons/56713dou.gif)
是保证开源项目品质
![](/icons/56713de.gif)
![](/icons/56713yi.gif)
个很有效
![](/icons/56713de.gif)
思路方法
![](/icons/56713dou2.gif)
代码审核
对于这个项目而言
![](/icons/56713dou.gif)
代码本身就是产品
![](/icons/56713dou.gif)
需要开放出来给全世界
![](/icons/56713de.gif)
人看
![](/icons/56713dou.gif)
所以代码
![](/icons/56713de.gif)
可读性和书写规范标准就变得十分重要
![](/icons/56713dou2.gif)
为此
![](/icons/56713dou.gif)
开发者制定了统
![](/icons/56713yi.gif)
而严格
![](/icons/56713de.gif)
规范标准(Checklist)
![](/icons/56713dou.gif)
使用公认
![](/icons/56713de.gif)
优秀
![](/icons/56713de.gif)
编码风格来实现这个平台
![](/icons/56713dou.gif)
从变量命名
![](/icons/56713de.gif)
规范标准到
![](/icons/56713chengxu.gif)
结构
![](/icons/56713de.gif)
安排
![](/icons/56713dou.gif)
这个规范标准十分清晰而完整
![](/icons/56713dou2.gif)
为了保证这个 Checklist 被很好
![](/icons/56713de.gif)
落实
![](/icons/56713dou.gif)
开发人员在 Development Pair
![](/icons/56713de.gif)
基础上
![](/icons/56713dou.gif)
在某些情况下(如新成员加入
![](/icons/56713dou.gif)
对工作尚不熟悉时)
![](/icons/56713dou.gif)
添加了
![](/icons/56713yi.gif)
个新
![](/icons/56713de.gif)
角色:代码审核员(QA)
![](/icons/56713yi.gif)
般地
![](/icons/56713dou.gif)
在需要 QA
![](/icons/56713de.gif)
Development Pair 当中
![](/icons/56713dou.gif)
有 Level1 和 Level2 两个 QA 角色:Level2
![](/icons/56713de.gif)
QA 主要负责检查结构和代码
![](/icons/56713de.gif)
缺陷和隐患
![](/icons/56713dou.gif)
例如可能
![](/icons/56713de.gif)
Bug、不妥
![](/icons/56713de.gif)
设计结构等等;Level1
![](/icons/56713de.gif)
QA 主要负责检查除开 Bug 以外
![](/icons/56713de.gif)
表面上
![](/icons/56713de.gif)
问题
![](/icons/56713dou.gif)
例如注释
![](/icons/56713de.gif)
书写问题、代码命名规范标准和容易引人混淆
![](/icons/56713de.gif)
代码书写等等
延伸阅读
最新评论