独家专访林昊:一步一步了解Java模块化

发表于:2011-5-30 09:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:阿菜    来源:51Testing软件测试网采编

#
java

  模块化编程从UNIX开始兴起,自Eclipse和NetBeans等插拔式IDE获得巨大成功之后,在最近几年受到广泛关注。

  但是,很多Java开发者对模块化编程仍然接触不多,对Java的模块化的进展也不甚了解。因此为了能让更多的开发者了解模块化编程的概念,它的学习、实现方式以及它的好处,我们请来了一位国内的OSGi布道者为大家进行一次简单的普及介绍。

  此次采访模式为邮件采访,林昊对51CTO编辑提出的7个问题一一进行了回复。内容如下:

  1. 模块的实现和传统编程方法有何不同?开发者需要学习哪些知识(比如版本控制、依赖性管理、规范的接口设计等)?

  林昊:模块的实现和传统的编程方法确实有一些差别,主要体现在模块之间类访问的隔离、版本选择这两个方面。如希望更好的设计模块化的系统,开发者需要学习ClassLoader机制、模块之间类的交互方法(这包括了模块怎么样对外提供可访问的package、怎么样访问其他模块提供的package、如何选择适合版本的package等)。

  2. 对模块化的形容,我们往往使用“高内聚”,“低耦合/松散耦合”这样的用语。您是如何理解这两个概念的?

  林昊:高内聚、低耦合更多程度是指让模块之间的依赖是清晰的,内聚体现在内部对功能实现的封装,而低耦合体现在模块对外提供的接口是可控的。在模块化之前,在Java体系中更多的是通过public、protected、private这样的作用域来保证依赖清晰;但事实证明,这样的方法来保证不是非常有效。而在模块化的体系中,则会有明确的模块之间接口暴露以及依赖的定义,因此能够更好的实现高内聚和低耦合。

  3. 模块化编程的好处有哪些?它解决了原来那种紧密耦合式编程中存在的哪些问题?

  林昊:模块化编程最大的好处在于有效的控制和避免了模块被外部误用。其他方面的好处在于各模块可以方便的做到引用自己所需要依赖的包,避免产生包冲突现象,对于现有java体系而言,另外一个好处则是可以做到多版本的共存。

  4. 您觉得模块化编程最大的难点在哪里?在您的模块化开发过程中,理清逻辑和层次所花的时间和编写代码花费的时间大致是怎样的比例?

  林昊:模块化编程最大的难点一方面是设计方面的挑战,在没有实际隔离情况下模块化的设计其实并不会真正做到有效的模块隔离的设计;另一方面是在开发过程中,以前的开发习惯都需要改变,例如以前需要依赖其他模块时,可以采用直接依赖工程或依赖jar的方式,但在模块化的系统中则不行。

  在实际的模块化开发过程中,更多的时间仍然会花费在设计阶段。

  5. 我们来谈谈OSGi规范。OSGi模块化规范有什么特点?

  林昊:OSGi是Java中目前唯一的一个模块化、动态化的规范。在模块化方面OSGi联盟已经研究了很多年了,因此OSGi规范对于模块的物理隔离、模块的交互、多版本这些方面都有了非常完善的机制,并且也得到了现在几乎所有的App Server厂商或开源社区的认可。

  6. 虽然OSGi已经是有十多年发展的成熟的模块化标准,但Sun在对Java进行模块化的时候却选择采用JSR 294,并在Java 7当中开展Jigsaw项目。您对此有什么看法?

  林昊:JCP在关于Java 7纳入模块化后到底采用什么标准争论了非常久,JSR 294是个研讨了多年的规范,但最后不了了之;Sun现在另起炉灶做Jigsaw,但其实并没有得到多大的拥护,各App Server仍然采用OSGi作为其基础平台就是最好的证明。可以说现在OSGi已经是Java领域模块化、动态化的事实性标准。

  7. 您认为理想的Java模块化标准应该具备怎样的特点?您对Java模块化的发展有怎样的期待?

  林昊:Java模块化标准应有明确的模块定义、模块之间隔离机制的定义、模块交互机制的定义,个人认为在模块化这一方面OSGi已经做到非常好了,当然,如果是语言级能支持就更完美了。

  对于Java模块化的发展而言,还是希望Sun能放开胸怀,采用OSGi作为Java模块化的实现基础,并纳入语言级中。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号