青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 3, comments - 0, trackbacks - 0, articles - 1

引言:

       在大型項目的開發(fā)中,隨著開發(fā)進度的進行,我們經(jīng)常碰到模塊之間耦合度太高的問題:由于開發(fā)人員經(jīng)常要在別的模塊中調(diào)用自己實現(xiàn)的功能,經(jīng)常隨意在某個函數(shù)中隨意添加調(diào)用代碼,造成了被修改的那個函數(shù)體過長,邏輯混亂。另一個問題是隨意包含頭文件:開發(fā)人員在開發(fā)中經(jīng)常為了要使用某些類的功能而包含引用類的頭文件造成類之間的耦合度太高,被包含類的頭文件一處輕微修改經(jīng)常就會引起整個程序大規(guī)模的編譯和鏈接,當編譯鏈接時間達到一定程度時,程序員就會被誘導去做不會導致大規(guī)模重編譯的改動,而不管改動是否會保持原來的設(shè)計。

      

常規(guī)解決方案:

1.        靜態(tài)類庫:設(shè)計良好的靜態(tài)類庫能實現(xiàn)功能上的隔離,無法避免類庫實現(xiàn) 必須重新編譯、鏈接整個應用程序的問題

2.        DLL:但仍有自己的缺點:

a)       函數(shù)重名問題:我們通過函數(shù)名來調(diào)用DLL的函數(shù),在并行開發(fā)中容易造成函數(shù)重名。

b)       依賴:如果采用常見的隱式連接,那DLL每發(fā)行了一個新版本都有必要和應用程序重新鏈接一次,因為DLL里面函數(shù)的地址可能已經(jīng)發(fā)生了改變。

3.        COMDLL的缺點就是COM的優(yōu)點。但是實際開發(fā)中我們會發(fā)現(xiàn)COM太復雜了。要使用COM編程,必須要非常熟悉C++中的COM實現(xiàn)細節(jié), 最好之前要有使用和實現(xiàn)COM對象和服務(wù)器的經(jīng)驗。開發(fā)中而且必須從.idl開始工作才能加入接口屬性和方法,對開發(fā)和使用都有很高的門檻。

 

本文的解決方案簡化的組件編程: 

實際上我們只是在開發(fā)項目,并不需要跨語言編程,也不需要組件的位置透明性。為了項目而引入COM代價往往太過于巨大。然而COM的內(nèi)部結(jié)構(gòu)對于大多數(shù)程序員是無關(guān)的。因此有必要對COM進行簡化以降低編程門檻。使之更符合常規(guī)的變成習慣。所以我們借鑒了COM的優(yōu)秀思想來構(gòu)建我們的程序架構(gòu),使我們的程序能夠像基于COM組件開發(fā)那樣的靈活,而開發(fā)人員又不需要掌握太多的COM知識。下面我們分步介紹我們的實現(xiàn)過程

一、       總體架構(gòu):

總體架構(gòu).bmp
l
應用程序:軟件的可執(zhí)行程序(.exe),通過組件管理器來創(chuàng)建組件,組件創(chuàng)建起來后應用程序直接訪問組件,不再通過組件管理器中轉(zhuǎn)。

l        組件管理器:整個框架的核心部分,它本身是一個DLL文件。應用程序通過它來創(chuàng)建、管理所有的相關(guān)DLL。作用類似與COM中的COM庫。它是應用程序加載的第一個DLL。

l        組件模塊:以DLL實現(xiàn)的分解后功能模塊。軟件的全部功能都在組件中實現(xiàn),組件與組件之間,組件和應用程序之間并不直接直接耦合,應用程序或一個組件不能直接創(chuàng)建另一個組件的實例,而必須通過組件管理器創(chuàng)建。組件對外并不暴露出類的實現(xiàn),而僅是通過組件管理器返回接口的指針。

二、       應用程序運行過程:

應用程序的運行序列圖:

應用程序的運行序列圖.bmp

1.       
主程序啟動:應用程序在啟動階段調(diào)用組件管理器啟動應用程序框架。

2.        組件管理器掃描應用程序目錄下所有的DLL文件,并動態(tài)加載DLL,根據(jù)事先約好的注冊函數(shù)名判斷是否是框架組件

3.        查詢組件A實現(xiàn)的接口

4.        組件A返回它實現(xiàn)的全部接口IDCLSID)。

5.        組件管理器把接口ID和對應的組件文件名登記在內(nèi)部鏈表中。

6.        3

7.        4

8.        5

9.        啟動過程結(jié)束,控制權(quán)交還給主程序

10.    業(yè)務(wù)功能開始:主程序調(diào)用組件管理器,啟動所有自啟動接口

11.    組件管理器查詢內(nèi)部鏈表,創(chuàng)建自啟動接口(組件B實現(xiàn)了自啟動接口)

12.    組件B在初始化函數(shù)中啟動了相關(guān)的業(yè)務(wù)功能。

13.    組件B需要用到接口A,但組件B并不知道誰實現(xiàn)了接口A,于是它調(diào)用組件管理器來創(chuàng)建接口A

14.    組件管理器查詢鏈表得知組件A實現(xiàn)了接口A

15.    組件管理器調(diào)用組件A的導出函數(shù)創(chuàng)建接口A的實例

16.    組件A返回接口A的實例指針

17.    組件管理器將接口A的實例指針傳遞給接口B

18.    組件B調(diào)用接口A來完成某一功能

19.    組件B使用完接口A,直接調(diào)用接口A的函數(shù)來釋放接口A占用的資源

20.    主程序運行結(jié)束:調(diào)用組件管理器釋放所有組件占用資源

21.    組件管理器釋放所有自啟動接口占用資源。直接調(diào)用接口B的函數(shù)釋放

22.    組件B釋放完畢

23.    應用程序退出

 

 

三、       應用程序的實現(xiàn):

應用程序的實現(xiàn)比較簡單:僅需在應用程序初始化時加載組件管理器,調(diào)用管理器提供的啟動框架,啟動自啟動接口。在退出時調(diào)用組件管理器釋放所有組件占用的資源即可

應用程序的實現(xiàn)圖.bmp
四、      
組件管理器:

組件管理器是應用程序和組件之間的橋梁。它維護了一張組件接口鏈表。負責整個框架的啟動、組件的創(chuàng)建、還有最后框架資源的釋放工作。組件管理器雖然重要,但它的實現(xiàn)卻很簡單,這里就不在詳講了。

五、       組件:

組件是整個項目的核心,整個應用程序的所有功能都由組件完成。一般而言一個功能點需要由兩個組件來完成,一個提供功能服務(wù),一個為自啟動組件,調(diào)用功能服務(wù)。

組件圖1.bmp
1.       
組件的實現(xiàn):

l        組件對外只暴露出接口,因此每一個組件至少都由兩部分構(gòu)成,組件接口和組件的實現(xiàn)類。

需函數(shù)表.bmp
a)       
組件接口:借鑒COM的思想,每一個接口都有唯一的GUID來標示。

   組件接口僅定義了一組類的純虛函數(shù),并不包含實現(xiàn)的任何細節(jié)

       b)        實現(xiàn)類:是接口的實現(xiàn)。包含全部的實現(xiàn)細節(jié)

l        COM類似,接口分為單實例和多實例接口。因此需要把創(chuàng)建部分分離出來。創(chuàng)建的代碼很相似,所以可以用模板來實現(xiàn)。將公用代碼寫成靜態(tài)庫,每個組件包含一份可以減少組件的代碼編寫量。

組件結(jié)構(gòu)圖

組件圖2.bmp
多實例接口的創(chuàng)建過程:

接口創(chuàng)建序列圖2.bmp
單實例接口的第一次創(chuàng)建過程與多實例一樣。第二次以后的創(chuàng)建為:

結(jié)果:

a)        開發(fā)獨立:每個模塊可以單獨開發(fā),單獨編譯,甚至可以單獨調(diào)試和測試。當所有的組件開發(fā)完成后把它們組合在一起就得到了完整的應用系統(tǒng)。當需求發(fā)生部分變更時并不需要對所有的組件進行修改,只需修改受影響的組件即可。

b)        修改獨立:新增功能只需將實現(xiàn)的DLL放入應用程序目錄即可,不需更改原有代碼。 除了核心模塊,其余功能拼湊可簡單通過增刪DLL實現(xiàn)

c)        模塊獨立:在開發(fā)過程中強迫程序員和接口而不是具體的類打交道,防止出現(xiàn)耦合性很強的代碼。

d)        智能擴展,只需將實現(xiàn)特定接口的COM(DLL)防入程序所在的目錄,程序自動創(chuàng)建它,可以在類的初始化函數(shù)內(nèi)實現(xiàn)程序功能。

e)        可重用性強,因為是針對接口開發(fā),只要符合接口規(guī)范就可以重用DLL

 

下面我們給出了一個按照仿COM架構(gòu)實現(xiàn)的Demo

1.        單獨一個Exe也能運行,雖然只是個空殼子沒有功能。

2.        加入ComManager.DLL,于是程序具有了自動擴展功能。

3.        加入了ModuleA.DLL,主界面出現(xiàn)了一個按鈕,右機窗口彈出了一個菜單,按鈕和菜單均可以響應命令。菜單和按鈕的創(chuàng)建和響應命令均在ModuleA.DLL中實現(xiàn)

4.        加入了ModuleB.DLL,主界面出現(xiàn)了另一個按鈕,右機窗口彈出的菜單又多了一項,按鈕和菜單均可以響應命令。新增的菜單和按鈕的創(chuàng)建及響應命令均在ModuleB.DLL中實現(xiàn)

5.        加入Sking.DLL,于是整個程序的界面都具有了膚化效果

6.        加入Log.DLL,于是程序具有了日志功能,可以紀錄模塊創(chuàng)建的順序

7.        。。。。。。。。。。。。。。

8.        。。。。。。。。。。

 

因為程序是基于接口開發(fā)的,所以功能的實現(xiàn)和模塊的名字無關(guān),和模塊加載的順序也無關(guān)(有興趣可以試一下)----當然ComManager.DLL必須是第一個加載,并且不能更名。

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产精品99久久久久久老狼| 国产乱码精品| 在线亚洲观看| 日韩视频免费观看| 一二美女精品欧洲| 亚洲欧美日韩一区在线观看| 午夜精品免费视频| 久久国内精品自在自线400部| 欧美在线日韩在线| 欧美不卡在线视频| 国产精品久久久久久久久免费桃花| 国产精品亚洲不卡a| 久久午夜精品| 99pao成人国产永久免费视频| 这里只有精品视频在线| 欧美亚洲免费| 亚洲国产毛片完整版| 99国产精品视频免费观看| 欧美亚洲专区| 欧美激情一区二区三区在线视频观看 | 久久一区二区三区超碰国产精品| 欧美 日韩 国产在线| 欧美片在线播放| 国产亚洲精品成人av久久ww| 亚洲精品人人| 久久久精品日韩欧美| 91久久午夜| 欧美在线三级| 国产精品毛片| 日韩一级片网址| 久久久久久久久综合| 99精品国产在热久久下载| 久久激情视频| 国产欧美日韩高清| 国产精品99久久久久久久女警 | 一区二区三区精品久久久| 欧美呦呦网站| 国产精品第一区| 亚洲三级电影在线观看| 久久精品天堂| 亚洲欧美国产精品桃花| 欧美日韩国产一区| 亚洲国产小视频| 久久午夜国产精品| 亚洲影音先锋| 国产精品v亚洲精品v日韩精品| 91久久综合亚洲鲁鲁五月天| 久久性天堂网| 久久精品日韩一区二区三区| 国产精品美女在线观看| 亚洲午夜精品一区二区| 亚洲精品一区二区三区婷婷月 | 国产欧美日韩综合一区在线观看 | 国产农村妇女精品| 亚洲欧美激情一区二区| 亚洲精品国产精品国产自| 久久天天狠狠| 激情欧美一区二区| 久久女同精品一区二区| 欧美影视一区| 韩国av一区| 老鸭窝亚洲一区二区三区| 久久综合99re88久久爱| 亚洲综合电影一区二区三区| 国产精品久久久久久av下载红粉| 亚洲一区二区影院| 亚洲一区二区黄| 国产欧美一区二区三区视频| 久久精品欧美日韩| 久久久久一区二区三区| 一区二区三区在线免费播放| 免费看成人av| 欧美精品一区二区久久婷婷| 亚洲精品久久久久久一区二区| 亚洲国产精品久久人人爱蜜臀| 欧美精品二区| 亚洲一区一卡| 午夜一区在线| 亚洲承认在线| 亚洲精品视频在线| 国产精品一区二区久久久久| 久久久国产成人精品| 欧美gay视频| 亚洲与欧洲av电影| 性久久久久久久久| 亚洲国产婷婷香蕉久久久久久99| 91久久久久久| 国产欧美日韩亚州综合| 蜜桃av一区二区| 欧美日韩免费高清一区色橹橹| 午夜精品久久久久久99热| 午夜一区二区三区不卡视频| 亚洲国产成人久久综合一区| 亚洲美女淫视频| 国产一区三区三区| 亚洲日本va午夜在线电影| 国产精品欧美一区二区三区奶水 | 欧美另类一区二区三区| 欧美有码在线视频| 欧美高清视频一区二区| 羞羞答答国产精品www一本| 久久人人超碰| 欧美一级大片在线观看| 欧美 日韩 国产 一区| 校园激情久久| 欧美日本不卡高清| 欧美成人久久| 国产一区二区三区免费观看| 91久久精品国产91久久性色tv| 国产精品无码永久免费888| 亚洲成色777777女色窝| 国产精品美女视频网站| 亚洲精品国产精品国产自| 在线播放精品| 欧美中文在线免费| 亚洲欧美日韩在线一区| 欧美成人精品高清在线播放| 久久久久久91香蕉国产| 欧美亚洲网站| 亚洲小说欧美另类社区| 欧美高清在线视频| 美国十次了思思久久精品导航| 国产乱码精品一区二区三区忘忧草| 夜夜嗨网站十八久久| 午夜精品久久99蜜桃的功能介绍| 99精品视频免费观看视频| 麻豆精品传媒视频| 麻豆精品国产91久久久久久| 国产色综合久久| 亚洲欧美日韩视频二区| 小嫩嫩精品导航| 国产精品视区| 午夜精品成人在线视频| 欧美中文字幕精品| 国产亚洲一级| 久久精品首页| 欧美大片免费观看| 亚洲人www| 欧美理论电影网| 日韩一区二区电影网| 亚洲免费一区二区| 欧美午夜在线观看| 亚洲无玛一区| 久久九九精品99国产精品| 国产亚洲欧美日韩美女| 久久av在线看| 欧美大片91| 亚洲天堂成人在线观看| 国产精品久久久久毛片软件| 亚洲永久免费| 久久久成人网| 亚洲欧洲在线播放| 欧美三级乱码| 欧美呦呦网站| 91久久在线视频| 午夜日韩av| 亚洲第一在线| 国产精品video| 久久精品国产精品亚洲综合| 欧美激情一区二区三区| 亚洲视频视频在线| 国产欧美午夜| 欧美黄在线观看| 亚洲欧美在线磁力| 亚洲高清视频在线观看| 午夜精品999| 最近中文字幕mv在线一区二区三区四区| 欧美激情亚洲国产| 午夜精品99久久免费| 亚洲成色777777女色窝| 亚洲女ⅴideoshd黑人| 激情视频亚洲| 欧美性大战久久久久久久蜜臀| 欧美在线3区| a4yy欧美一区二区三区| 免费av成人在线| 亚洲欧美在线一区二区| 亚洲大胆av| 国产手机视频一区二区| 欧美日韩高清免费| 久久精品国产久精国产思思| 99国产精品视频免费观看| 六月天综合网| 欧美在线观看一二区| 夜夜嗨av一区二区三区网站四季av| 国产毛片一区二区| 欧美日韩日本国产亚洲在线| 久久久精品tv| 欧美亚洲一区二区在线| 一本色道久久88综合日韩精品| 欧美成人免费全部| 久久久久久精| 午夜欧美大片免费观看| 一区二区三区精密机械公司| 伊人久久大香线| 国内免费精品永久在线视频| 国产精品影片在线观看| 亚洲永久精品国产| 91久久在线播放| 亚洲福利专区|