Erich Gamma 和 Kent Beck合著的《Contributing to Eclipse》一书中,提到了Eclipse的一些法则 。在扩展者相关的法则中,由“分层法则”一条,大致意思如下:“将语言无关的功能与特定于具体语言 的功能开发,将核心功能与UI功能分开”。
个人觉得虽然叫做“分层法则”,其实体现的是模块合理划分的思想。
现在重点关注一下“核心功能和UI功能分开”,说一下自己的经验,仅供大家参考。自己的经验是, 分层法则是在概要设计模块划分的时候就需要引入并严格遵守。
1、根据需求,对模块进行划分。典型的输出结果是:底层模块和生成功能模块,示意图如下:
说明:例如在做集成开发环境(IDE)的产品,底层基础模块包括了资源管理(包含编译处理)、运行 时候模型等类型的模块,当然也可能是workbench类似的模块(虽然是UI,但同样是底层基础模块),这 些底层模块为上层模块提供服务。上层功能模块类似于你创建了一种自己的基于GEF的编辑器等类型的模 块。
2、对各个模块分别进行核心功能和UI进行拆分。这其中既包含了对上层功能模块机型UI和核心功能的 拆分,也包含了对底层模块的拆分。示意图如下:
说明:到这里,我们的具体功能模块划分了如下:
com.myproduct.myeditor.ui插件(UI部分,例如包含了使用GEF创建了流程编辑器的代码)
com.myproduct.myeditor.core插件(模型部分,例如包含了EMF创建编辑器对应模型的代码)
我们也把底层的模块做了划分:
com.myproduct.resource插件(例如包含了builder等逻辑代码)
com.myproduct.refactoring.ui插件(重构功能,例如包含了一系列重构需要的UI代码等)
com.myproduct.refactoring.core插件(重构功能,例如包含了一些重构需要的模型代码等)