獨家專訪林昊:一步一步了解Java模塊化
原創【51CTO獨家特稿】模塊化編程從UNIX開始興起,自Eclipse和NetBeans等插拔式IDE獲得巨大成功之后,在最近幾年受到廣泛關注。51CTO開發頻道曾對模塊化編程的優點與實現原理進行過簡單的介紹,并且在Java模塊化方面,對OSGi規范進行了持續的報道。
但是,很多Java開發者對模塊化編程仍然接觸不多,對Java的模塊化的進展也不甚了解。多方觀望,2010年將是Java模塊化的一年,因此51CTO編輯希望能在這一年中讓更多的開發者了解模塊化編程的概念,它的學習、實現方式以及它的好處。為此,我們請來了一位國內的OSGi布道者為大家進行一次簡單的普及介紹。
有請China OSGi User Group Director,淘寶網平臺架構部架構師——林昊(@BlueDavy)。林昊是《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項目。您對此有什么看法?
#t#林昊:JCP在關于Java 7納入模塊化后到底采用什么標準爭論了非常久,JSR 294是個研討了多年的規范,但最后不了了之;Sun現在另起爐灶做Jigsaw,但其實并沒有得到多大的擁護,各App Server仍然采用OSGi作為其基礎平臺就是最好的證明(參考閱讀:JSR 294被叫停 應用服務器押寶OSGi)。可以說現在OSGi已經是Java領域模塊化、動態化的事實性標準。
7. 您認為理想的Java模塊化標準應該具備怎樣的特點?您對Java模塊化的發展有怎樣的期待?
林昊:Java模塊化標準應有明確的模塊定義、模塊之間隔離機制的定義、模塊交互機制的定義,個人認為在模塊化這一方面OSGi已經做到非常好了,當然,如果是語言級能支持就更完美了。
對于Java模塊化的發展而言,還是希望Sun能放開胸懷,采用OSGi作為Java模塊化的實現基礎,并納入語言級中。




























