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

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

引言:

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

      

常規(guī)解決方案:

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

2.        DLL:但仍有自己的缺點(diǎn):

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

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

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

 

本文的解決方案簡(jiǎn)化的組件編程: 

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

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

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

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

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

二、       應(yīng)用程序運(yùn)行過(guò)程:

應(yīng)用程序的運(yùn)行序列圖:

應(yīng)用程序的運(yùn)行序列圖.bmp

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

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

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

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

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

6.        3

7.        4

8.        5

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

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

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

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

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

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

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

16.    組件A返回接口A的實(shí)例指針

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

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

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

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

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

22.    組件B釋放完畢

23.    應(yīng)用程序退出

 

 

三、       應(yīng)用程序的實(shí)現(xiàn):

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

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

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

五、       組件:

組件是整個(gè)項(xiàng)目的核心,整個(gè)應(yīng)用程序的所有功能都由組件完成。一般而言一個(gè)功能點(diǎn)需要由兩個(gè)組件來(lái)完成,一個(gè)提供功能服務(wù),一個(gè)為自啟動(dòng)組件,調(diào)用功能服務(wù)。

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

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

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

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

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

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

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

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

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

結(jié)果:

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

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

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

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

e)        可重用性強(qiáng),因?yàn)槭轻槍?duì)接口開(kāi)發(fā),只要符合接口規(guī)范就可以重用DLL

 

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

1.        單獨(dú)一個(gè)Exe也能運(yùn)行,雖然只是個(gè)空殼子沒(méi)有功能。

2.        加入ComManager.DLL,于是程序具有了自動(dòng)擴(kuò)展功能。

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

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

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

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

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

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

 

因?yàn)槌绦蚴腔诮涌陂_(kāi)發(fā)的,所以功能的實(shí)現(xiàn)和模塊的名字無(wú)關(guān),和模塊加載的順序也無(wú)關(guān)(有興趣可以試一下)----當(dāng)然ComManager.DLL必須是第一個(gè)加載,并且不能更名。

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久成人免费| 亚洲欧洲av一区二区三区久久| 国产精品色网| 欧美激情第六页| 久久久免费av| 午夜精品亚洲一区二区三区嫩草| 亚洲久久一区| 亚洲国产99| 免费在线成人| 麻豆精品视频在线观看| 欧美综合二区| 午夜亚洲影视| 亚洲欧美另类在线观看| 亚洲一级在线观看| 一区二区三区 在线观看视频| 亚洲全部视频| 亚洲精品一区二区三区蜜桃久| 欲色影视综合吧| 狠狠色狠狠色综合日日小说| 国产一区二区成人| 国内一区二区三区在线视频| 国产亚洲一二三区| 国产视频在线观看一区二区三区| 国产精品午夜在线观看| 国产精品国产三级国产a| 欧美午夜精品理论片a级按摩| 欧美日韩精品免费看| 欧美日韩性视频在线| 欧美日韩精品在线观看| 欧美日韩伦理在线| 国产精品扒开腿做爽爽爽软件 | 欧美精品在线极品| 欧美高清在线一区| 欧美日韩国产精品自在自线| 欧美日韩国产成人在线免费| 欧美日韩国产区| 欧美日韩一二区| 国产精品日产欧美久久久久| 国产欧美1区2区3区| 国产一区二区三区自拍| 怡红院精品视频| 亚洲精品乱码久久久久久蜜桃91| 日韩视频免费观看| 亚洲伊人一本大道中文字幕| 欧美在线播放高清精品| 久久婷婷人人澡人人喊人人爽| 男人的天堂成人在线| 91久久黄色| 亚洲婷婷在线| 久久精品最新地址| 欧美大片免费看| 国产精品99免费看| 国产在线不卡| 亚洲欧洲在线视频| 亚洲综合国产精品| 久热精品在线| 亚洲精品在线观看免费| 亚洲欧美日韩一区二区| 久久免费高清视频| 欧美日韩一区二区免费在线观看| 国产日韩av在线播放| 亚洲国产三级| 亚洲免费视频中文字幕| 久久综合久久美利坚合众国| 亚洲第一中文字幕| 亚洲一区亚洲二区| 噜噜爱69成人精品| 国产精品久久| 亚洲国产成人在线| 午夜欧美精品| 亚洲高清三级视频| 午夜精品福利一区二区蜜股av| 欧美 日韩 国产精品免费观看| 国产精品美女久久久久久免费| 永久域名在线精品| 亚洲欧美日韩综合aⅴ视频| 免费视频最近日韩| 亚洲午夜国产一区99re久久| 老牛国产精品一区的观看方式| 国产精品国产自产拍高清av王其| 亚洲国产合集| 欧美在线视频a| 91久久久久久久久久久久久| 欧美在线视频不卡| 欧美视频在线免费| 亚洲国内精品| 久久久综合网站| 亚洲香蕉视频| 欧美日韩国产精品一卡| 在线电影欧美日韩一区二区私密| 欧美亚洲视频在线观看| 亚洲精品一区二区三区四区高清| 久久久久成人精品免费播放动漫| 国产精品久久久久7777婷婷| 日韩午夜免费| 欧美sm极限捆绑bd| 欧美一级淫片aaaaaaa视频| 欧美天天在线| 日韩亚洲国产欧美| 亚洲大黄网站| 久久男人资源视频| 国外成人在线| 久久精品国产亚洲一区二区三区| 日韩亚洲不卡在线| 欧美精品一区二区在线播放| 亚洲激情网站免费观看| 老司机67194精品线观看| 性色av香蕉一区二区| 国产精品视频yy9099| 亚洲性av在线| 一区二区三区福利| 欧美日韩一区三区| 一本一道久久综合狠狠老精东影业 | 久久亚洲精品伦理| 国内精品久久久久久久影视蜜臀 | 午夜精品福利视频| 一本色道久久综合亚洲二区三区| 欧美国产精品久久| 亚洲精品少妇| 亚洲国产老妈| 欧美成人精品一区| 亚洲精品日韩综合观看成人91| 欧美电影免费| 久久综合网hezyo| 在线免费观看成人网| 欧美大片一区| 欧美大片一区| 日韩一级精品| 一本色道久久88亚洲综合88| 欧美日韩一区二区国产| 亚洲在线视频观看| 中文久久精品| 国产亚洲aⅴaaaaaa毛片| 久久久国产午夜精品| 久久精品中文字幕一区| 雨宫琴音一区二区在线| 欧美第一黄色网| 欧美另类在线播放| 亚洲女ⅴideoshd黑人| 亚洲综合色视频| 韩日在线一区| 欧美大胆成人| 欧美日韩国产区| 欧美一区二区三区日韩| 久久精品免费播放| 亚洲美女av网站| 亚洲手机视频| 极品尤物一区二区三区| 亚洲国产成人精品久久| 欧美日韩在线大尺度| 久久激情网站| 免费不卡在线视频| 亚洲性视频h| 久久国产精品毛片| 亚洲精选久久| 亚洲欧美在线磁力| 亚洲激情第一区| 中文日韩电影网站| 伊人狠狠色j香婷婷综合| 亚洲精品一区二区在线| 国产伦精品一区二区三区免费迷 | 午夜亚洲精品| 亚洲国产精品高清久久久| 99精品欧美一区二区三区| 国产日韩精品一区二区浪潮av| 欧美大片免费观看在线观看网站推荐| 欧美日韩国产综合久久| 久久视频精品在线| 欧美日韩国产三区| 久久婷婷蜜乳一本欲蜜臀| 欧美日韩美女| 麻豆精品传媒视频| 国产精品高潮呻吟久久| 欧美成人亚洲| 国产欧美一区二区三区在线看蜜臀 | 午夜精品亚洲一区二区三区嫩草| 亚洲黄色成人网| 亚洲永久免费观看| 亚洲美女毛片| 久久国产欧美日韩精品| 亚洲一级二级| 欧美xart系列在线观看| 久久久99爱| 欧美日韩中文| 亚洲高清网站| 韩日成人在线| 亚洲综合国产| 宅男精品视频| 欧美插天视频在线播放| 久久久久久有精品国产| 国产精品播放| 亚洲美女视频网| 最新日韩av| 久久亚洲国产精品日日av夜夜| 西西裸体人体做爰大胆久久久| 欧美精品乱人伦久久久久久 | 亚洲午夜黄色| 亚洲私人影吧| 欧美好吊妞视频| 欧美大尺度在线|