基於組件的.NET軟體開發(5)
來源:互聯網
上載者:User
實戰:
建立一個VB.NET Windows應用程式:VBTestDynamicComponent。將前面介紹的兩個類ComponentList和LoadComponent加入到工程中。
我們在程式啟動時從設定檔中讀入相關的程式集資訊和類名資訊,為此在主表單的Form_Load過程中添加以下代碼:
01 Private objLoadComponent As LoadComponent
02 Private VBObj As Object
03 Private ComponentReader As MyComponentList
04
05 Private Sub VBTestDynamicForm_Load(……) Handles MyBase.Load
06 objLoadComponent = New LoadComponent()
07 ComponentReader = New MyComponentList("Componentlist.xml")
08 Dim filename As String
09 Dim classname As String
10 ComponentReader.beginRead()
11 filename = ComponentReader.getFileName(0)
12 classname = ComponentReader.getClassName(0)
13 Dim ret As Boolean
14 ret = objLoadComponent.LoadComponentLibrary(filename)
15 VBObj = objLoadComponent.LoadClass(classname)
16 VBObj.show()
17 End Sub
我們看見,第07--10句從設定檔中取出DLL檔案名稱和類名,第11、12句擷取第一個DLL檔案名稱和類名,然後在第14句裝入組件庫,第15句裝入對象,因為返回的對象其實是一個表單,所以,在第16句可以直接調用Show()方法顯示此表單。
從代碼中可以看見,在.NET中動態建立對象是多麼地方便和簡單!請注意:在工程中我們甚至不需要給工程添加對特定組件的引用!本例中動態建立的對象是表單,而Form對象是預設就可使用的。在真實工程中,可以把所有的介面放入一個特定的DLL中,我稱之為“Facade Assembly”,其它工程只需引用這個DLL,則實現了這些介面的所有組件都可自由地通過名字來建立!
小結
我們在短短的一篇短文中介紹了.NET的混合語言開發特性和動態裝配組件技術,展示了在.NET下開發基於組件的應用軟體之簡便性與靈活性,這就為我們開發“擁抱變化”的軟體系統提供了新的可能性,可以總結如下:
(1)我們可以通過開發前的OOAD(物件導向分析與設計)將系統功能分塊,然後分配給不同的開發人員開發成多個DLL,最後再方便地將這些組件組合起來構造一個新的系統,一旦把某個功能做成了組件,它就可以在以後的項目中不斷複用,BUG會越來越少,功能會越來越強,運行會越來越穩定,這樣的組件,將是無比寶貴的技術資源。
(2)由於.NET強大的元件物件模型,原來適用於原始碼層級的一些物件導向特性:比如繼承和多態,現在都可以推廣應用到組件層級。特別地,在組件間現在我們也可以應用設計模式了。
同志們,趕緊去翻翻GoF的經典書籍,把上面的24種模式應用在組件間,你一定會深深地感到軟體技術進步所給程式員帶來的廣闊發揮餘地。
(3)通過在外部儲存配置資訊,使我們可以在不重新編譯器的情況下,動態地讓整個軟體顯現出一種完全不同的風格與功能。想想如果在我們的樣本中建立的兩個表單是另兩個複雜的程式的主表單,這不就意味著我們的程式可以非常方便地整合它們嗎?實現起來太簡單了,不就是在設定檔中增加一兩行代碼嗎?
(4)設定檔採用XML標準,可以很容易地為元素增加新的屬性,從而擴充程式的功能。另外,通過提供DTD和schema,可以在動態裝入設定檔之前就驗證檔案是否是有效,還有XSLT可以對設定檔進行動態地置換……,XML的靈活性與可擴充性就不用我多說了吧?這方面的靈活應用就看你的啦!
(4)有了以上的技術支撐,我們開發軟體的過程中重點就放在OOAD之上了,這正好體現出在物件導向時代系統分析與設計重於編碼的特點。
比如某軟體公司需要開發某個行業的產品,它可以對這個行業業務功能進行詳細的分析,抽象出不同層級的業務,其中最基本的業務被做成可以動態裝載的組件。當需要為此行業的一家新客戶定製軟體時,可以通過裝配現有的基本業務組件,再開發少量的專用組件來完成,從而極大地提高開發效率。這就是CBD(Component-Based Develop:基於組件開發)。
目前很熱門的MDA(Model Driven Architecture),其實就是基於組件的,沒有大量的穩定的組件做支撐,MDA是“Drive”不起來的。
筆者發現,凡是成功的軟體公司,尤其是那些一流的跨國公司,比如CA、SAP、愛立信等,其內部都有著一個大規模的組件庫,庫中的組件都經過了嚴格的實踐考驗,基於已有的成熟的組件開發新系統,其代碼複用率有時可達80%到90%,要達到這種代碼複用程度,需要軟體企業深入某一個行業內進行幾年十幾年甚至幾十年的深厚積累,這也是年輕的國內軟體企業與國外一流企業的差距所在。
(5)……
好了,不用再多說了,相信聰明的讀者可以體會到組件開發的巨大威力。
再回到.NET,微軟在給VS.NET做廣告時說:它大大提高了開發效率。這並不是吹牛,我個人感覺,使用.NET開發項目,較之傳統的Win32平台上的技術,開發效率可以提高1/3!真正深入地學習與應用.NET,筆者不禁對開發與設計.NET技術的科學家和工程師們敬佩不已,向他們的創造性勞動致意。同時,筆者也更期望中國的軟體技術能奮起直追,我們的確落後得太多!