很多Java开发者对模块化编程仍然接触不多对Java的模块化的进展也不甚了解多方观望年将是Java模块化的一年因此CTO编辑希望能在这一年中让更多的开发者了解模块化编程的概念它的学习实现方式以及它的好处为此我们请来了一位国内的OSGi布道者为大家进行一次简单的普及介绍
有请China OSGi User Group Director淘宝网平台架构部架构师——林昊(@BlueDavy)林昊是《OSGi原理与最佳实践》一书的作者
此次采访模式为邮件采访林昊对CTO编辑提出的个问题一一进行了回复内容如下
模块的实现和传统编程方法有何不同?开发者需要学习哪些知识(比如版本控制依赖性管理规范的接口设计等)?
林昊模块的实现和传统的编程方法确实有一些差别主要体现在模块之间类访问的隔离版本选择这两个方面如希望更好的设计模块化的系统开发者需要学习ClassLoader机制模块之间类的交互方法(这包括了模块怎么样对外提供可访问的package怎么样访问其他模块提供的package如何选择适合版本的package等)
对模块化的形容我们往往使用高内聚低耦合/松散耦合这样的用语您是如何理解这两个概念的?
林昊高内聚低耦合更多程度是指让模块之间的依赖是清晰的内聚体现在内部对功能实现的封装而低耦合体现在模块对外提供的接口是可控的在模块化之前在Java体系中更多的是通过publicprotectedprivate这样的作用域来保证依赖清晰(参考阅读模块化概念解惑)但事实证明这样的方法来保证不是非常有效而在模块化的体系中则会有明确的模块之间接口暴露以及依赖的定义因此能够更好的实现高内聚和低耦合
模块化编程的好处有哪些?它解决了原来那种紧密耦合式编程中存在的哪些问题?
林昊模块化编程最大的好处在于有效的控制和避免了模块被外部误用其他方面的好处在于各模块可以方便的做到引用自己所需要依赖的包避免产生包沖突现象对于现有java体系而言另外一个好处则是可以做到多版本的共存
您觉得模块化编程最大的难点在哪里?在您的模块化开发过程中理清逻辑和层次所花的时间和编写代码花费的时间大致是怎样的比例?
林昊模块化编程最大的难点一方面是设计方面的挑战在没有实际隔离情况下模块化的设计其实并不会真正做到有效的模块隔离的设计另一方面是在开发过程中以前的开发习惯都需要改变例如以前需要依赖其他模块时可以采用直接依赖工程或依赖jar的方式但在模块化的系统中则不行
在实际的模块化开发过程中更多的时间仍然会花费在设计阶段
我们来谈谈OSGi规范OSGi模块化规范有什么特点?
林昊OSGi是Java中目前唯一的一个模块化动态化的规范在模块化方面OSGi联盟已经研究了很多年了因此OSGi规范对于模块的物理隔离模块的交互多版本这些方面都有了非常完善的机制并且也得到了现在几乎所有的App Server厂商或开源社区的认可
虽然OSGi已经是有十多年发展的成熟的模块化标准但Sun在对Java进行模块化的时候却选择采用JSR 并在Java 当中开展Jigsaw项目您对此有什么看法?
林昊JCP在关于Java 纳入模块化后到底采用什么标准争论了非常久JSR 是个研讨了多年的规范但最后不了了之Sun现在另起炉灶做Jigsaw但其实并没有得到多大的拥护各App Server仍然采用OSGi作为其基础平台就是最好的证明(参考阅读JSR 被叫停 应用服务器押宝OSGi)可以说现在OSGi已经是Java领域模块化动态化的事实性标准
您认为理想的Java模块化标准应该具备怎样的特点?您对Java模块化的发展有怎样的期待?
林昊Java模块化标准应有明确的模块定义模块之间隔离机制的定义模块交互机制的定义个人认为在模块化这一方面OSGi已经做到非常好了当然如果是语言级能支持就更完美了
对于Java模块化的发展而言还是希望Sun能放开胸怀采用OSGi作为Java模块化的实现基础并纳入语言级中