日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Prism4文档翻译(第四章 第一部分) 转载bluesky234

發(fā)布時(shí)間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Prism4文档翻译(第四章 第一部分) 转载bluesky234 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本節(jié)導(dǎo)讀: 第四章介紹了模塊化應(yīng)用程序開發(fā)所必要的知識(shí)和需要注意的內(nèi)容。而本部分通過講述模塊化應(yīng)用程序開發(fā)所注意的必要概念,包括IModule接口,模塊加載過程,模塊列表,模塊間通信,和依賴注入容器,引出微軟所推薦的兩款依賴注入框架——Unity和MEF。 在本章全部翻譯完成后,我會(huì)在本章最后一部分補(bǔ)上全部的導(dǎo)讀。?

第四章 模塊化應(yīng)用程序開發(fā)

模塊化應(yīng)用程序指的是將一個(gè)應(yīng)用程序劃分成若干個(gè)可以組合的功能單元。一個(gè)模塊封裝了應(yīng)用程序的一部分,并且通常是一系列相關(guān)的關(guān)注點(diǎn)。他們包含了含有用戶界面和業(yè)務(wù)邏輯相關(guān)組件的集合,比如應(yīng)用程序的某些功能,或者是一些系統(tǒng)基礎(chǔ)模塊,比如應(yīng)用程序級(jí)的日志系統(tǒng)或者用戶認(rèn)證系統(tǒng)。模塊之間相對(duì)獨(dú)立但又可以通過松耦合手段進(jìn)行通信。模塊化應(yīng)用程序可以使開發(fā),測試,部署或者擴(kuò)展應(yīng)用程序變的更加方便。

舉例來說,考慮一個(gè)個(gè)人銀行。用戶可以使用各種各樣的功能,比如轉(zhuǎn)賬,付款,或者從他們的個(gè)人UI中更新個(gè)人信息。然而,這些功能都是封裝到各個(gè)獨(dú)立的模塊中。這些模塊互相之間使用如數(shù)據(jù)庫或者web service等后端系統(tǒng)進(jìn)行通信。應(yīng)用程序服務(wù)將這些模塊整合到一起并且提交用戶交互內(nèi)容。用戶看起來就好像這是一個(gè)應(yīng)用程序一樣。

下圖描述了多模塊應(yīng)用程序的設(shè)計(jì)思想:

?

4.1 構(gòu)建多模塊應(yīng)用程序的好處

你可以已經(jīng)使用類,接口,程序集來搭建一個(gè)結(jié)構(gòu)優(yōu)良的應(yīng)用程序,并且它很好的體現(xiàn)了OO的設(shè)計(jì)原則。即便如此,除非特別注意,你的應(yīng)用程序還是設(shè)計(jì)成為“一整塊”(因?yàn)樗泄δ芏际鞘褂镁o耦合的方式實(shí)現(xiàn)的),這樣會(huì)使應(yīng)用程序難以部署,開發(fā),擴(kuò)展,測試和維護(hù)。

從另一方面說,而應(yīng)用程序模塊化能夠幫助你識(shí)別大的功能區(qū)并且可以將其分開開發(fā)和測試。這樣的方式可以簡化開發(fā)和測試的過程,而且也可以讓你的應(yīng)用程序更加靈活,在將來也可以更方便的擴(kuò)展。

4.1.1 Prism為模塊化開發(fā)所提供的內(nèi)容

Prism為模塊化應(yīng)用程序開發(fā)和運(yùn)行時(shí)模塊管理提供支持。使用Prism的模塊化開發(fā)功能可以幫助你節(jié)省測試和實(shí)現(xiàn)你自己的模塊化框架的時(shí)間。Prism提供了以下的模塊化開發(fā)功能:

l? 注冊和定位模塊的模塊列表,模塊列表可以通過以下途徑創(chuàng)建:

u? 在模塊中定義或者在XAML文件中定義

u? 在WPF:在同一目錄中自動(dòng)發(fā)現(xiàn)所有模塊,而不需要集中的逐一定義。(澤注:應(yīng)該說的是MEF方式)

u? 在WPF:使用配置文件定義

l? 定義模塊的元數(shù)據(jù)屬性以說明初始化方式和依賴關(guān)系

l? 與依賴注入容器集成以支持模塊間以松耦合關(guān)系連接

l? 在模塊讀取時(shí):

u? 依賴管理,包含了二次(duplicate)和循環(huán)檢測以保證每個(gè)模塊以正確的方式加載,并且只加載一次

u? 通過需要時(shí)加載和后臺(tái)下載的方式最小化程序載入時(shí)間;也就是說一些模塊可以在需要的時(shí)候在后臺(tái)加載和初始化

4.2 關(guān)鍵概念

本節(jié)介紹了與Prism模塊化開發(fā)有關(guān)的關(guān)鍵概念,包括IModule接口,模塊加載過程,模塊列表,模塊間通信,和依賴注入容器。

4.2.1 IModule:模塊化應(yīng)用程序的構(gòu)建者

一個(gè)模塊是一系列包裝在一起并且可以獨(dú)立開發(fā),測試,部署,和集成到應(yīng)用程序的功能和資源的集合。這個(gè)包可以是在XAP文件中的一個(gè)或多個(gè)程序集,他們可能是一個(gè)松散集合,也可能是集中放置。每個(gè)模塊都有一個(gè)樞紐類以負(fù)責(zé)初始化和將本身的功能與應(yīng)用程序集合,這個(gè)類會(huì)實(shí)現(xiàn)IModule接口。一個(gè)包中只要有一個(gè)實(shí)現(xiàn)IModule接口的類就足以判定這是一個(gè)模塊。IModule接口只有一個(gè)稱為Initialize的方法,通過該方法,可以定義任何需要添加到應(yīng)用程序中的邏輯和功能。根據(jù)模塊的功能,將視圖注冊到復(fù)雜UI中,添加應(yīng)用程序需要使用的服務(wù),或者擴(kuò)展應(yīng)用程序現(xiàn)有功能。以下是一個(gè)定義一個(gè)模塊最基本的代碼。

1 public class MyModule : IModule
2 {
3 public void Initialize()
4 {
5 // Do something here.
6 }
7 } 復(fù)制代碼

?

【注意】:除了使用IModule接口提供的Initialize方法,the Stock Trader RI使用了一種基于屬性的定義法來注冊視圖,服務(wù),和類型。

4.2.2 模塊生命周期

在Prism中,模塊以以下方法初始化:

l? 模塊注冊/發(fā)現(xiàn),模塊在特定應(yīng)用程序的模塊列表中在運(yùn)行時(shí)加載。該列表說明了模塊是否需要加載,它們的位置,以及以何種程序被加載。

l? 加載模塊,模塊所在的程序集被載入內(nèi)存。這一階段使模塊通過網(wǎng)站,其它遠(yuǎn)程連接手段或者直接在本地文件中發(fā)現(xiàn)的途徑被下載。

l? 初始化模塊,下載后,模塊被初始化。也就是產(chǎn)生一個(gè)實(shí)例并且通IModule接口提供的Initialize方法初始化。

下圖說明了模塊的加載過程。

?

4.2.2 模塊列表

ModuleCategory提供了應(yīng)用程序所需要的模塊信息。其本質(zhì)是ModuleInfo類的集合。每個(gè)模塊的名字,類型,位置,和其它模塊中的屬性信息都在ModuleInfo描述和記錄。以下是上些通過ModuleInfo實(shí)例生成ModuleCategory的典型方法:

l? 在代碼中注冊

l? 在XAML中注冊

l? 使用配置文件注冊(只有在WPF中可以)

l? 通過本地目錄自動(dòng)發(fā)現(xiàn)(只有在WPF中可以)

你可以根據(jù)應(yīng)用程序的需要選擇發(fā)現(xiàn)或者注冊機(jī)制。通過配置文件或者XAML可以讓你不需要在項(xiàng)目中引用模塊。使用目錄自動(dòng)發(fā)現(xiàn)則不需要將它們在某個(gè)文件中特別定義。

4.2.3 控制模塊加載

Prism應(yīng)用程序可以盡早加載模塊,也就是所謂的“可用時(shí)加載”,或者當(dāng)應(yīng)用程序需要它們的時(shí)候加載,也就是所謂的“使用時(shí)加載”。在Silverlight應(yīng)用程序中,模塊可以應(yīng)用程序一起下載,或者在應(yīng)用程序啟動(dòng)后在必要時(shí)再下載。模塊加載過程請參考如下內(nèi)容:

l? 模塊如果是應(yīng)用程序執(zhí)行必備的,那么,必須同應(yīng)用程序一同下載并且在運(yùn)行時(shí)被初始化

l? 如果模塊包含了應(yīng)用程序的常用功能,那么就可以在即將需要它的時(shí)候通過后臺(tái)下載的方式加載(澤注:這種就是上文所述的“可用時(shí)加載”)

l? 如果模塊所包含的功能并不常使用(或者提供的功能不是其它模塊所必需的)就可以選擇在需要時(shí)加載

4.2.4 模塊與應(yīng)用程序的整合

Prism提供了以下兩個(gè)類負(fù)責(zé)應(yīng)用程序啟動(dòng)過程:UnityBootstrapperMefBootstrapper。這些類用以創(chuàng)建和配置模塊的發(fā)現(xiàn)和加載的管理。你可以通過幾行代碼重寫配置方法以通過XAML文件,配置文件,本地目錄的形式加載模塊。

模塊通過的Initalize方法與應(yīng)用程序的其它部分整合。初始化的方法是多樣的,它取決與你應(yīng)用程序的結(jié)構(gòu)和模塊的內(nèi)容。以下的內(nèi)容是一般模塊整合進(jìn)應(yīng)用程序中必做的事:

l? 將模塊的視圖都添加到應(yīng)用程序的導(dǎo)航結(jié)構(gòu)中,這是使用視圖發(fā)現(xiàn)或者視圖注入構(gòu)建復(fù)雜UI通常要做的事

l? 訂閱應(yīng)用程序級(jí)的事件或者服務(wù)

l? 向應(yīng)用程序的依賴注入容器注入共享的服務(wù)

4.2.5 模塊間通信

即使模塊間是松耦合關(guān)系,但是模塊間通信還是必不可少的。通信的方式有多種,每種方式都有其獨(dú)特的優(yōu)勢。通常,解決方案中使用的會(huì)是這些方式的組合。以下說明了一些通信方式:

l? 松耦合事件,模塊可以告知某個(gè)事件已經(jīng)發(fā)生。其它模塊可以訂閱這些事件以保證在事件發(fā)生時(shí),它們會(huì)收到通知。松耦合事件是建立兩個(gè)模塊通信的輕量級(jí)方法;因而,它很容易實(shí)現(xiàn)。但是一個(gè)過于依賴事件的設(shè)計(jì)會(huì)很難維護(hù),由其是那些為了實(shí)現(xiàn)一個(gè)目標(biāo)而安排的事件。在這種情況下,應(yīng)該考慮共享服務(wù)。

l? 共享服務(wù),?????? 共享服務(wù)是一個(gè)可以通過通用接口訪問的類。通常,共享服務(wù)是在公用程序集中定義,并且提供了系統(tǒng)層的服務(wù),例如,用戶認(rèn)證,日志或者配置。

l? 共享資源,如果你不想讓兩個(gè)模塊直接通信,那么也可以通過共享資源來間接通信,比如數(shù)據(jù)庫或者一些web service。

4.2.5 依賴注入和模塊化應(yīng)用程序

容器,比如Unity(Unity Application Block)和MEF(Managed Extensibility Framework),可以讓你方便的使用控制反轉(zhuǎn)(Inversion of Control,IoC)和依賴注入,它們都是設(shè)計(jì)模塊的強(qiáng)力設(shè)計(jì)模式。它們可以讓模塊在不通過復(fù)雜代碼說明引用的情況下獲得這些引用關(guān)系。以此來提供代碼的靈活性和可重用性。依賴注入在構(gòu)建松耦合模塊化應(yīng)用程序中非常常用。Prism本身對(duì)構(gòu)成應(yīng)用程序和組件的依賴注入容器是不可知的。依賴注入容器的選擇最大程序取決于你應(yīng)用程序的需求。不過Microsoft也推薦了兩款主打依賴注入框架——Unity和MEF。

patterns & practices Unity Application Block提供了一個(gè)完整的依賴注入容器所必要的內(nèi)容。它提供了屬性注入,構(gòu)造函數(shù)注入和函數(shù)注入以供顯示的向模塊注入所需要的內(nèi)容。它也提供了許多其它典型依賴注入容器所有的功能。

MEF(它也是.NET Framework 4和Silverlight 4的組成部分)通過提供基于依賴注入的模塊來保證.NET程序的可擴(kuò)展性,并且提供其它模塊化應(yīng)用程序開發(fā)所需要的功能。它使得應(yīng)用程序可以在運(yùn)行時(shí)發(fā)現(xiàn)模塊并且以松耦合的方式整合到應(yīng)用程序中。MEF是一個(gè)有良好擴(kuò)展性和構(gòu)建可能的框架,它包含了程序集和類的發(fā)掘,類的依賴分析,依賴注入,一些不錯(cuò)的程序集,和XAP下載性能。Prism提供了所有MEF的優(yōu)點(diǎn),如下文所述:

l? 將模塊中的類與XAP位置進(jìn)行關(guān)聯(lián)

l? 在WPF或者Silverlight中通過XAML或者屬性方式注冊模塊

l? 在WPF中通過配置文件或者目錄掃描的方式注冊模塊

l? 模塊加載時(shí)的狀態(tài)跟蹤

l? 在使用MEF時(shí)的自定義模塊元數(shù)據(jù)

當(dāng)然,Unity與MEF都可以與Prism無縫連接。

轉(zhuǎn)載于:https://www.cnblogs.com/nnkook/articles/2282708.html

總結(jié)

以上是生活随笔為你收集整理的Prism4文档翻译(第四章 第一部分) 转载bluesky234的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。