成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

模塊化編程的優(yōu)點(diǎn)與實現(xiàn)原理概述

原創(chuàng)
開發(fā) 后端 架構(gòu)
模塊化編程是近年來開發(fā)界的一個關(guān)注焦點(diǎn)。從UNIX系統(tǒng)到Eclipse和NetBeans等IDE,模塊化編程正逐步擴(kuò)展到開發(fā)界的各個領(lǐng)域,并深入到語言級的層面,比如Java。本文從歷史角度描述了模塊化編程的優(yōu)點(diǎn),并以NetBeans為例,簡單介紹了其實現(xiàn)原理。

【51CTO精選譯文】本文是《Rich Client Programming: Plugging into the NetBeans Platform》(中文版譯名為《NetBeans富客戶端編程權(quán)威教程》,Sun中國技術(shù)社區(qū)推薦的NetBeans學(xué)習(xí)用書)英文版公開章節(jié),即第二章的節(jié)選譯文,章節(jié)名稱為“模塊化編程的好處”。通過閱讀這一章節(jié),讀者們將對模塊化編程的起源和實現(xiàn)原理產(chǎn)生初步的了解,并了解到模塊化編程的優(yōu)點(diǎn)。有關(guān)模塊化編程的實現(xiàn)部分,本文著重介紹了NetBeans的情況。

51CTO全新Java頻道,關(guān)注Java開發(fā)的前沿

分布式開發(fā)

閉門造車的軟件開發(fā)時代早已過去。在嵌入式系統(tǒng)之外,幾乎每一位開發(fā)者都需要依賴別人寫的類庫或框架。這種借助并復(fù)用他人提供的基礎(chǔ)設(shè)施、框架以及類庫的好處在于使自己能夠?qū)W⒂趹?yīng)用本身的邏輯當(dāng)中。這樣縮短了軟件開發(fā)所需要的時間。

過去的幾十年間,開源軟件的興起令類庫的復(fù)用具有雙倍的吸引力。我們現(xiàn)在有針對多種程序中的各種問題而誕生的現(xiàn)成解決方案,而獲取這些解決方案不用花一文錢。開源產(chǎn)品起于UNIX內(nèi)核,基礎(chǔ)C類庫和命令行工具,并通過Web服務(wù)器和Web瀏覽器延伸至Ant,Tomcat,JUnit,Javacc等Java工具領(lǐng)域——而這種情況還有無限制發(fā)展的趨勢。在編寫一個現(xiàn)代軟件的過程中,集成工作的部分和創(chuàng)新的部分大致是對半分的。將可用的碎片撿起來并組合到一起是現(xiàn)代應(yīng)用開發(fā)的主要工序。人們不再從零開始編寫一切。人們在需要HTTP服務(wù)器的時候為他們的應(yīng)用選擇Apache或者Tomcat,在需要數(shù)據(jù)庫的時候選擇MySQL或PostgreSQL。應(yīng)用軟件將這些零碎部件粘連起來,并加入自己的邏輯。最終的成品是功能完備的、性能好的、并且在相當(dāng)短的時間內(nèi)開發(fā)出來的應(yīng)用軟件。

看看Linux版本是如何發(fā)行的。紅帽的Fedora,Mandriva,SUSE,還有Debian,它們所包含的應(yīng)用程序其實大致上差不多,而且都是同一群人寫的。發(fā)布者不過是簡單的將它們打包,并提供“膠水”用于統(tǒng)一的安裝。發(fā)行商往往只編寫中央管理軟件和安裝軟件,并提供一些質(zhì)量保證,以確保所有選定的組件能夠協(xié)同工作。這個過程對于Linux的普及產(chǎn)生了相當(dāng)理想的效果。有一個例子可以證明此模型的意義,那就是Mac OS X:它其實就是個安裝了一堆蘋果插件的FreeBSD Unix。對于這樣的軟件,需要注意的一個重點(diǎn)就是它創(chuàng)建的方式采用了一種分布式開發(fā)模型。軟件的開發(fā)者和發(fā)行者可能完全不認(rèn)識對方,也沒有交流過,而他們往往也并不生活在同一個地域。

這種分布式開發(fā)有如下特征。第一,應(yīng)用程序(或操作系統(tǒng))的源代碼不再處于某一個開發(fā)者完全的掌控之中。源代碼被散布至世界各地。毫無疑問,構(gòu)建這樣的軟件與傳統(tǒng)那種源代碼完全在你家中的代碼庫的應(yīng)用構(gòu)建是完全不同的。

#t#另外我們需要了解的是,也沒有一個人對整個項目的時間表有完全的掌控。不單單是源代碼,開發(fā)者們也遍布世界各地,并以他們自己的時間表工作。這種情況并不像聽起來的那樣不尋?;虿豢孔V。如果你曾經(jīng)為超過五十人的項目制定過時間表,那么你一定會明白,對整個項目進(jìn)程擁有“完全的掌控”最多只是一個安慰自己的幻想。你隨時需要準(zhǔn)備好拋棄某個特性,或是發(fā)布這個或那個組件的一個老版本。同樣的模式也適用于分布式開發(fā)。

每個人都有這樣一個權(quán)利:使用一個新版本或舊版本類庫的自由。

使用外部庫并使用它們組建應(yīng)用程序,這意味著人們能夠花費(fèi)更少的時間和精力創(chuàng)造更復(fù)雜的軟件。代價則是,我們需要管理這些類庫,確保它們的兼容性。這不是一個簡單的任務(wù)。但是,對于如今高度復(fù)雜系統(tǒng)的組建,也沒有其他既實用、性價比又高的開發(fā)模式了。

你對Java模塊化規(guī)范有何看法?歡迎到Java頻道的后院參與討論!

#p#

模塊化應(yīng)用程序

針對分布式開發(fā)的挑戰(zhàn),其技術(shù)解決方案就是模塊化。在一大塊緊密耦合的代碼中,每個單元都可能與其他單元進(jìn)行直接的接口。而模塊化應(yīng)用則正相反,它由小塊的、分散的代碼塊組成,每一塊都是獨(dú)立的。于是,這些代碼塊可以由不同的團(tuán)隊進(jìn)行開發(fā),而他們都有各自的生命周期和時間表。最終的成果則可以由另一個獨(dú)立的個體,即發(fā)行者,進(jìn)行集成。

51CTO編輯推薦:OSGi,成熟的Java模塊化規(guī)范

對于Java而言,將一組類庫放在Java類路徑上并運(yùn)行一個應(yīng)用程序在很早以前就實現(xiàn)了。NetBeans平臺在類庫的管理方面已經(jīng)走的相當(dāng)遠(yuǎn):它積極的參與類庫的加載過程,并強(qiáng)制每一個類庫都滿足其他類庫對自己的最低版本需求。這樣的類庫被稱為模塊。NetBeans模塊系統(tǒng)是一個運(yùn)行時容器,它確保了系統(tǒng)在運(yùn)行時的完整性。

版本控制

將應(yīng)用程序分解為獨(dú)立的類庫,這帶來了一個新的挑戰(zhàn)——我們需要確保這些互不依賴的零件們能夠在一起工作。這個問題有多種解決方案,而最流行的一種就是版本控制。每一塊模塊化應(yīng)用都有一個版本號,常用杜威十進(jìn)制格式表示,比如1.34.8這種數(shù)字組合。新版本的發(fā)布帶來增加的版本號,比如1.34.10,1.35.1,或者2.0。其實仔細(xì)想來,使用增長的版本號來代表兩個版本的復(fù)雜軟件之間的不同是挺荒謬的。不過這種方法解釋起來很簡單,而且它的流行也說明了這種方法是十分可行的。

一個模塊系統(tǒng)的另一個特點(diǎn)是外部依賴的聲明。很多組件對外部條件有一定需求。比如說,一個模塊系統(tǒng)中的組件可能需要一個XML解析器,或者需要安裝某種數(shù)據(jù)庫驅(qū)動,或者需要某種文本編輯器或者瀏覽器才能工作。對于每一個需求,另外一個模塊可以指定其接口的特定版本號。即使對外部類庫的依賴性極低,但每一個Java程序都對Java本身有版本要求。一個真正的模塊系統(tǒng)可以指定理想的最低JDK版本。一個模塊可能會有JDK>=1.5,xmlparser>=3.0,webbrowser>=1.5這樣的版本需求。在運(yùn)行時,啟動應(yīng)用的模塊代碼的依賴條件需要被滿足,即,XML解析器在3.0版或以上,瀏覽器在1.5版或以上,如此這般。NetBeans模塊系統(tǒng)正是這樣的。使用依賴模式來維持模塊系統(tǒng)中組件之間的依賴性有一個大前提,那就是我們必須遵循一系列的規(guī)則。第一個規(guī)則是向后兼容性:如果新版本發(fā)布,那么所有在之前版本下可建立的契約也必須能夠在新版本下工作。這一點(diǎn)說起來很容易,但實現(xiàn)起來沒那么容易。第二個規(guī)則是,系統(tǒng)中的組件需要準(zhǔn)確的說明它們需要什么。當(dāng)一個模塊的依賴性產(chǎn)生改變的時候,它必須要說出來,這樣系統(tǒng)才能夠準(zhǔn)確的確認(rèn)這些依賴性是否被滿足。因此,如果一個模塊系統(tǒng)產(chǎn)生了對新功能的依賴性,比如一個HTML編輯器,那么你便需要定義這個新的依賴性(比如,htmleditor>=1.0)。同時如果你開始使用一個新的HTML編輯器組件的接口,而這個接口在1.7版之后才有,那么你需要更新你的依賴型需求到這個組件的1.7版本:htmleditor>=1.7。在NetBeans模塊系統(tǒng)中,第二個規(guī)則在實踐當(dāng)中是相對容易遵循的,因為一個模塊的編譯時類路徑僅僅包括有依賴性聲明的模塊,而沒有依賴性聲明的模塊是不會被編譯的。

二級版本信息

之前我們有關(guān)版本控制方法的討論針對的是類庫的規(guī)范版本。規(guī)范版本描述了該類庫當(dāng)中的公共API的一個特定快照。

某些版本的類庫會不可避免的遭遇不得不修復(fù)的bug。因此,二級版本的識別也應(yīng)該與組件關(guān)聯(lián)起來,那就是這個組件的實現(xiàn)版本。與規(guī)范版本不同,一個實現(xiàn)版本往往用“Build20050611”這樣的字符串進(jìn)行標(biāo)注,因此只能通過等式來判定。這就提供了一個二級識別機(jī)制,這個機(jī)制可以用來決定某個特定的代碼模塊是否有必須修復(fù)的bug。我們知道,在3.1規(guī)范版本中存在的bug未必會在3.2版本或者3.1版本的其他實現(xiàn)版本中存在,因此,出于bug修復(fù)或某些特殊處理的需求,將實現(xiàn)版本與類庫關(guān)聯(lián)起來是十分有用的。

依賴性管理

#t#版本和依賴性系統(tǒng)需要一個管理器,以確保這個系統(tǒng)中的每一部分的需求都得到滿足。這樣的一個管理器可以檢查每一塊組件的安裝時間,保持系統(tǒng)的一致性——Linux發(fā)行版的RPM或Debian包就是這樣工作的。描述依賴性的元數(shù)據(jù)在運(yùn)行時非常重要。有些元數(shù)據(jù)可以讓應(yīng)用進(jìn)行動態(tài)類庫升級而無需關(guān)閉應(yīng)用。元數(shù)據(jù)還能決定一個模塊動態(tài)加載的依賴性是否滿足。如果沒有滿足,元數(shù)據(jù)將向用戶解釋可能會遇到的問題。

NetBeans IDE是一個模塊化應(yīng)用。它的模塊——即組成它的那些類庫——在運(yùn)行時被查知并加載。它們可以安裝小塊小塊的功能,如組件,菜單項或服務(wù)等;它們可以在啟動時運(yùn)行代碼,進(jìn)行程序初始化;它們可以通過聲明式注冊機(jī)制把平臺和IDE提供的各個部分注冊為服務(wù)并在需要時將其初始化。NetBeans模塊系統(tǒng)使用安裝組件的聲明依賴性為每個模塊的類路徑進(jìn)行父類路徑配置,并在模塊加載類的時候決定在哪些JAR文件當(dāng)中搜索。這樣確保了模塊類路徑當(dāng)中不存在任何不屬于其依賴樹的模塊JAR,并強(qiáng)制確保每個組件都有聲明式依賴性。一個沒有聲明依賴性的模塊將無法從其他模塊中呼叫代碼,而當(dāng)依賴性沒有被全部滿足時,其他模塊將不會加載。

原文:The Benefits of Modular Programming

作者:Tim Boudreau,Jaroslav (Yarda) Tulach和Geertjan Wielenga

責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2021-07-14 09:26:51

UPS電源模塊化

2017-05-18 10:23:55

模塊化開發(fā)RequireJsJavascript

2010-02-03 09:01:01

Java動態(tài)模塊化

2021-12-16 22:02:28

webpack原理模塊化

2018-03-21 21:31:28

Java9編程Java

2022-09-21 11:51:26

模塊化應(yīng)用

2012-11-08 09:45:44

JavaScriptrequireJS

2021-06-10 18:40:32

ES 標(biāo)準(zhǔn)模塊化

2014-04-27 10:16:31

QCon北京2014Andrew Bett

2017-05-18 11:43:41

Android模塊化軟件

2010-01-20 09:14:49

C語言模塊化

2019-08-28 16:18:39

JavaScriptJS前端

2020-09-17 10:30:21

前端模塊化組件

2020-09-18 09:02:32

前端模塊化

2012-11-08 10:21:41

JSrequireJavaScript

2022-02-17 16:22:41

高壓直流模塊化UPS

2023-12-25 22:24:36

C++模塊Module

2010-03-11 17:24:27

Python編程語言

2022-09-05 09:01:13

前端模塊化

2009-12-10 11:04:08

Java模塊化OSGiJigsaw
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 毛片免费看 | 一区二区三区回区在观看免费视频 | 麻豆久久久9性大片 | 国产麻豆乱码精品一区二区三区 | 在线视频a | 精品国产一区一区二区三亚瑟 | 欧洲亚洲视频 | 日韩电影一区 | 91久久精品国产91久久性色tv | www四虎com | 欧美一区二区在线观看 | 久久天天躁狠狠躁夜夜躁2014 | 欧美精品一区二区免费视频 | 免费激情av| 国产精品免费一区二区 | 国产专区在线 | 欧美精品在线免费 | 北条麻妃国产九九九精品小说 | 精品久久香蕉国产线看观看亚洲 | 亚洲九九色 | 精品一区二区三区免费毛片 | h片在线免费观看 | 黄色片网此 | 久草视频网站 | 色婷婷av99xx | 国产在线不卡 | 午夜影院在线观看免费 | 国产精品美女久久久久aⅴ国产馆 | 欧美久操网 | 欧美精品在线一区 | 午夜精品久久久久久不卡欧美一级 | 日韩三级一区 | www.av在线 | 毛片久久久| 美女黄视频网站 | 国产精品久久久乱弄 | 久久精品国产99国产精品 | 欧州一区二区三区 | 欧美一区二区三区视频 | 国产精品日本一区二区不卡视频 | 精品久久99 |