Prism簡(jiǎn)介

最近公司讓我給其他員工普及一下Prism框架关划,整理一下資料和思路。于是乎翻譯了一下官方的介紹翘瓮。

Prism簡(jiǎn)介

1.Prism能干嘛

Prism為程序設(shè)計(jì)提供指導(dǎo),旨在幫助用戶(hù)更加容易的設(shè)計(jì)和構(gòu)建豐富贮折、靈活、易于維護(hù)WPF桌面應(yīng)用程序资盅。Prism使用設(shè)計(jì)模式(如MVVM,復(fù)合視圖,事件聚合器)调榄,幫助你創(chuàng)建一個(gè)松耦合的程序。遵循這些設(shè)計(jì)模式原則呵扛,將目標(biāo)程序解耦成獨(dú)立的模塊每庆。這些類(lèi)型的應(yīng)用程序被稱(chēng)為復(fù)合應(yīng)用程序。

2.什么是復(fù)合應(yīng)用程序

復(fù)合應(yīng)用程序通常包含的功能有:多個(gè)屏幕今穿、復(fù)雜的用戶(hù)交互和數(shù)據(jù)可視化缤灵。這些功能用以體現(xiàn)特定場(chǎng)景和業(yè)務(wù)邏輯。此類(lèi)應(yīng)用程序通常與多個(gè)后端系統(tǒng)和服務(wù)和交互,使用分層架構(gòu),還可能是物理部署到多個(gè)層。該類(lèi)應(yīng)用程序還在生命周期中預(yù)期會(huì)有大量的新功能需求和商業(yè)機(jī)會(huì)腮出。簡(jiǎn)而言之帖鸦,就是“長(zhǎng)期使用”和“頻繁變更”。如果沒(méi)有這種要求胚嘲,則不應(yīng)該使用Prism作儿。

3.Prism包含什么

Prism 5目標(biāo)平臺(tái)為.NET 4.5。5版本包含了新的MVVM馋劈,navigation攻锰,MEF的指導(dǎo)。

開(kāi)發(fā)中遇到的挑戰(zhàn)

通常情況下,客戶(hù)端應(yīng)用程序的開(kāi)發(fā)中會(huì)遇到很多的挑戰(zhàn)侣滩。

  • 應(yīng)用程序需求可能隨時(shí)間改變
  • 新的商業(yè)機(jī)會(huì)和挑戰(zhàn)可能出現(xiàn)
  • 新技術(shù)可能已經(jīng)變得可用
  • 用戶(hù)反饋導(dǎo)致需求變更

因此,構(gòu)建一個(gè)靈活的口注、易修改、易擴(kuò)展的應(yīng)用程序是至關(guān)重要的君珠。然而設(shè)計(jì)這樣一個(gè)程序是很難的寝志。它需要一個(gè)架構(gòu),允許應(yīng)用程序的各個(gè)部分是獨(dú)立開(kāi)發(fā)和測(cè)試,可以修改或更新后,不影響應(yīng)用程序的其余部分,相當(dāng)于是隔離的單獨(dú)部分策添。

大多數(shù)企業(yè)級(jí)應(yīng)用程序都是相當(dāng)復(fù)雜的,以至于需要不止一個(gè)開(kāi)發(fā)人員,甚至是一個(gè)大型包括UI設(shè)計(jì)人員和本地化人員的開(kāi)發(fā)團(tuán)隊(duì)材部。這時(shí),如何設(shè)計(jì)程序使得多個(gè)開(kāi)發(fā)者或者是多個(gè)子團(tuán)隊(duì)能夠獨(dú)立有效的開(kāi)發(fā)程序子模塊唯竹,并且能夠在子模塊完成之后順利無(wú)縫集成到應(yīng)用程序中去乐导,是一個(gè)相當(dāng)大的挑戰(zhàn)。

像電路板一樣去設(shè)計(jì)和構(gòu)建應(yīng)用程序可能會(huì)導(dǎo)致應(yīng)用程序的維護(hù)非常困難低效浸颓。這里說(shuō)的“電路板”是指一個(gè)應(yīng)用程序的組件是緊耦合的,它們之間沒(méi)有明確的分離物臂。通常,這么玩會(huì)把程序員搞到吐。很難將新特性添加到系統(tǒng)或更換現(xiàn)有功能,很難解只修bug而不破壞系統(tǒng)的其他部分,而且很難測(cè)試和部署产上。此外,還影響開(kāi)發(fā)人員和設(shè)計(jì)人員的合力工作棵磷。

復(fù)合程序(Composite Applications)

一個(gè)行之有效的解決方法是將復(fù)雜的程序拆分成許多離散的、松耦合的晋涣、半獨(dú)立的組件仪媒,并且這些組件能夠輕松的在shell中組合成一套解決方案。按這種設(shè)計(jì)構(gòu)建的程序通常稱(chēng)為復(fù)合程序谢鹊。

使用復(fù)合程序有如下好處:

  • 允許由不同的個(gè)人或團(tuán)隊(duì)進(jìn)行模塊的單獨(dú)開(kāi)發(fā)算吩、測(cè)試和部署;更容易被修改或添加新功能,從而使應(yīng)用程序更易于擴(kuò)展和維護(hù)。注意,獨(dú)立開(kāi)發(fā)者也能從復(fù)合程序開(kāi)發(fā)中獲得好處佃扼,因?yàn)槟軌騽?chuàng)建更易測(cè)試偎巢、可維護(hù)的應(yīng)用程序使用復(fù)合的方法。
  • 提供了一個(gè)通用的由許多松耦合的模塊支撐UI組件組成的Shell兼耀。減少了多個(gè)程序員添加同一個(gè)新功能到UI時(shí)的沖突压昼,使得程序能夠呈現(xiàn)出一個(gè)統(tǒng)一的外觀挎扰。
  • 提高了重用性。在代碼邏輯和業(yè)務(wù)邏輯之間提供了一個(gè)干凈的視點(diǎn)巢音。讓你能夠更容易的管理組件之間的依賴(lài)關(guān)系和交互邏輯遵倦。
  • 能夠根據(jù)開(kāi)發(fā)者或開(kāi)發(fā)團(tuán)隊(duì)的焦點(diǎn)或?qū)I(yè)技能不同,分配不同的任務(wù)或功能官撼。特定的說(shuō)梧躺,能夠讓UI和程序的業(yè)務(wù)邏輯分開(kāi)。也就是說(shuō)UI可以更專(zhuān)注的開(kāi)發(fā)豐富的用戶(hù)界面傲绣。

復(fù)合程序特別適合創(chuàng)建各種客戶(hù)端程序系列掠哥。例如多個(gè)后端系統(tǒng)創(chuàng)建多個(gè)終端軟件。下圖展示了典型的此類(lèi)復(fù)合程序秃诵。


典型示例

在如上圖類(lèi)型的應(yīng)用程序中续搀,用戶(hù)可以看到豐富并且靈活的界面。以任務(wù)為導(dǎo)向菠净,將功能分布在多個(gè)后端系統(tǒng)禁舷、服務(wù)以及數(shù)據(jù)存儲(chǔ)。這些后端系統(tǒng)毅往、服務(wù)以及數(shù)據(jù)存儲(chǔ)則是由一個(gè)或多個(gè)專(zhuān)用模塊組成的牵咙。清晰分離應(yīng)用程序邏輯代碼和UI使得組成應(yīng)用程序的所有模塊都呈現(xiàn)出不同樣子并保持一致的風(fēng)格。
如果一個(gè)符合程序能夠讓不同團(tuán)隊(duì)維護(hù)的獨(dú)立組件在UI中集成顯示攀唯,這點(diǎn)將會(huì)非常的有用洁桌。下圖展現(xiàn)了此種類(lèi)型的程序,每個(gè)高亮框里的UI都是一個(gè)單獨(dú)的組件侯嘀。


組件集成UI

什么是Prism不能做的

盡管Prism解決了在WPF中可能遇到的很多問(wèn)題另凌,但是根據(jù)應(yīng)用程序需求和場(chǎng)景的不同,也會(huì)有其他的問(wèn)題出現(xiàn)戒幔。比如吠谢,Prism不能直接解決下面的問(wèn)題。

  • 臨時(shí)連接和數(shù)據(jù)同步
  • 服務(wù)和消息的基礎(chǔ)設(shè)計(jì)
  • 身份認(rèn)證和授權(quán)
  • 應(yīng)用程序性能
  • 應(yīng)用程序版本
  • 錯(cuò)誤處理和容錯(cuò)

先決條件

使用Prism必須會(huì)使用WPF溪食。在使用Prism時(shí)囊卜,你將不可避免的接觸到下列概念:

  • XAML
  • Data binding
  • Resources
  • Commands
  • User Controls
  • Dependency properties
  • Behaviors

Prism概述

架構(gòu)目標(biāo)

為了幫助架構(gòu)師和開(kāi)發(fā)者實(shí)現(xiàn)下列目的:

  • 創(chuàng)建能夠由模塊組成的程序娜扇,這些模塊能夠被單獨(dú)地編寫(xiě)错沃、組裝、部署雀瓢,并且對(duì)于程序來(lái)說(shuō)是可選的
  • 最小化團(tuán)隊(duì)之間的依賴(lài)枢析,讓每個(gè)團(tuán)隊(duì)專(zhuān)注與特定的領(lǐng)域。比如UI刃麸、邏輯代碼實(shí)現(xiàn)或者是架構(gòu)代碼的開(kāi)發(fā)醒叁。
  • 通過(guò)架構(gòu)提高不同團(tuán)隊(duì)之間的復(fù)用能力
  • 通過(guò)抽象團(tuán)隊(duì)通用服務(wù)提高程序質(zhì)量
  • 迭代添加新的功能

Prism設(shè)計(jì)目標(biāo)

Prism被設(shè)計(jì)用來(lái)幫助你設(shè)計(jì)和實(shí)現(xiàn)豐富、靈活、易于維護(hù)的WPF程序把沼。Prism實(shí)現(xiàn)了多種設(shè)計(jì)模式啊易,突出架構(gòu)設(shè)計(jì)的松耦合、關(guān)注點(diǎn)分離等原則饮睬。使用設(shè)計(jì)模式和Prism提供的額能力租谈,你可以通過(guò)獨(dú)立開(kāi)發(fā)的松耦合組件輕松的集成到整個(gè)應(yīng)用程序中,從而開(kāi)發(fā)一個(gè)應(yīng)用程序捆愁。

Prism圍繞架構(gòu)原則的分散關(guān)注點(diǎn)和松耦合原則而設(shè)計(jì)的割去。這使得Prism提供能一下的好處:

  • 重用。Prism通過(guò)允許組件和服務(wù)能夠輕松的被開(kāi)發(fā)昼丑、測(cè)試呻逆、集成到一個(gè)或多個(gè)程序來(lái)實(shí)現(xiàn)重用。組件級(jí)別的復(fù)用是通過(guò)依賴(lài)注入來(lái)輕松地發(fā)現(xiàn)和集成單元測(cè)試級(jí)別的組件菩帝。應(yīng)用級(jí)別的復(fù)用是重用封裝了應(yīng)用級(jí)別能力的模塊咖城。
  • 可擴(kuò)展。Prism通過(guò)管理組件依賴(lài)呼奢,允許組件在運(yùn)行時(shí)很容易地被集成或者被其他實(shí)現(xiàn)所替換酒繁,使得程序能夠很容易地被擴(kuò)展。并且將程序分解到模塊控妻,使得模塊能夠獨(dú)立地更新和部署州袒。Prism庫(kù)中的許多組件本身就可以被擴(kuò)展或者是替換。
  • 靈活弓候。Prism通過(guò)允許像開(kāi)發(fā)集成新能力一樣更新功能郎哭。Prism還允許WPF程序使用通用服務(wù)和組件開(kāi)發(fā),允許程序以最適當(dāng)?shù)胤绞饺ゲ渴鸷褪褂霉酱妗_€允許程序基于不同的角色和配置夸研,提供不同的使用功能。
  • 團(tuán)隊(duì)開(kāi)發(fā)依鸥。Prism促進(jìn)團(tuán)隊(duì)開(kāi)發(fā)亥至,通過(guò)允許不同的團(tuán)隊(duì)單獨(dú)開(kāi)發(fā)甚至部署不同的應(yīng)用程序部分。通過(guò)讓團(tuán)隊(duì)專(zhuān)注于不同的功能領(lǐng)域或業(yè)務(wù)功能領(lǐng)域來(lái)減少團(tuán)隊(duì)之間的依賴(lài)贱迟。
  • 質(zhì)量姐扮。Prism通用讓開(kāi)發(fā)團(tuán)隊(duì)充分地測(cè)試服務(wù)和組件提高程序質(zhì)量。此外衣吠,由于通用服務(wù)和組件都被完全地測(cè)試過(guò)了茶敏,開(kāi)發(fā)團(tuán)隊(duì)能夠?qū)W⒂诔绦蛐枨蠖皇侨绾螌?shí)現(xiàn)和測(cè)試基礎(chǔ)代碼。

Prism關(guān)鍵概念

Prism提供的能力和設(shè)計(jì)模式也許對(duì)你而言并不熟悉缚俏,特別是你剛接觸設(shè)計(jì)模式和復(fù)合應(yīng)用程序開(kāi)發(fā)惊搏。本章節(jié)提供了一個(gè)關(guān)于Prism的主要概念和代碼或文檔中你會(huì)看見(jiàn)的屬于的簡(jiǎn)短介紹贮乳。

  • Modules。模塊是一些功能的集合恬惯,能夠被單獨(dú)地開(kāi)發(fā)向拆、測(cè)試和部署。在大多數(shù)情況下酪耳,模塊是被不同的團(tuán)隊(duì)開(kāi)發(fā)維護(hù)亲铡。一個(gè)典型的Prism程序是由多個(gè)模塊組成的。模塊用來(lái)表示特定業(yè)務(wù)相關(guān)的功能(例如配置文檔管理)葡兑,并且封裝實(shí)現(xiàn)該功能需要的所有視圖奖蔓,服務(wù),和數(shù)據(jù)模型讹堤。模塊也可以用來(lái)封裝程序中可以重用的通用程序代碼或服務(wù)(例如登陸或異常管理服務(wù))吆鹤。
  • Module catalog。在復(fù)合程序中洲守,模塊(modules)必須由宿主程序(host application)動(dòng)態(tài)地發(fā)現(xiàn)和加載疑务。Prism中,模塊目錄是用來(lái)指定哪些模塊需要被加載梗醇,加載時(shí)按照什么順序加載知允。模塊目錄是有模塊管理(module manager)組件和模塊加載(module loader)組件使用。為了初始化模塊叙谨,這兩個(gè)組件需要下載模塊(如果是遠(yuǎn)程模塊的話(huà))温鸽,加載模塊到程序的域中。Prism中可以使用多種方式指定模塊目錄手负,直接在代碼中編寫(xiě)涤垫、使用XAML聲明,或者是使用配置文件竟终。如果有必要蝠猬,你也可以實(shí)現(xiàn)一個(gè)自定義的模塊目錄。
  • Shell统捶。Shell就是模塊的宿主程序榆芦。Shell定義了總的布局以及程序結(jié)構(gòu),但是通常不知道具體寄宿在其中的是什么模塊喘鸟。它通常實(shí)現(xiàn)了公共程序服務(wù)和基本代碼匆绣,但是大多數(shù)功能和內(nèi)容則是在模塊中實(shí)現(xiàn)的。Shell通常也提供了頂層的窗口或者虛擬元素用來(lái)承載模塊提供的不同UI組件迷守。
  • Views犬绒。View是封裝了程序特定特性或功能的UI控件旺入。View使用了MVVM模式來(lái)連接UI和后臺(tái)邏輯代碼及數(shù)據(jù)兑凿。View通常封裝了UI界面并且定義了用戶(hù)交互行為凯力,使得View能夠脫離功能地更新和替換。視圖使用數(shù)據(jù)綁定來(lái)同Model層交互礼华。
  • View models咐鹤。View model是封裝了程序界面邏輯和狀態(tài)的類(lèi),屬于MVVM模式圣絮。View model封裝了大部分的程序功能祈惶。View model定義了屬性、命令扮匠、事件捧请,View通過(guò)數(shù)據(jù)綁定來(lái)訪問(wèn)這些屬性、命令和事件棒搜。
  • Models疹蛉。Model層的類(lèi)封裝程序的數(shù)據(jù)和業(yè)務(wù)邏輯,也是MVVM模式中的一部分力麸。Model封裝了數(shù)據(jù)以及任何與數(shù)據(jù)有關(guān)的認(rèn)證或邏輯規(guī)則可款,以保證數(shù)據(jù)的完整性和一致性。
  • Commands克蚂。命令封裝了程序的功能闺鲸。使用命令能夠讓這些功能脫離UI界面地聲明和測(cè)試亏较。命令能夠在View model層定義凡蜻。Prism提供了DelegateCommand類(lèi)和CompositeCommand類(lèi)特姐。CompositeCommand是用來(lái)表示一個(gè)能夠相互調(diào)用的命令的集合佑淀。
  • Region誊锭。Region是一個(gè)邏輯占位纫谅,在Shell或者是View中定義甫何。Region使得程序UI布局被更新而不需要去更改程序邏輯穆咐。許多通用控件可以被當(dāng)成Region使用益缎,比如ContentControl谜慌、ItemsControl、ListBox或者是TabControl莺奔。View能夠在Region中自動(dòng)顯示或者是編程控制View顯示欣范。Prism能夠讓你通過(guò)Region實(shí)現(xiàn)導(dǎo)航。Region能夠被其他的組件通過(guò)RegionManager組件指定位置令哟。RegionManager使用RegionAdapter和RegionBehavior組件來(lái)整合顯示在指定Region中的View恼琼。
  • Navigation。導(dǎo)航是一個(gè)改變程序UI來(lái)放映用戶(hù)和程序交互的結(jié)果或者是程序內(nèi)部狀態(tài)變化的過(guò)程屏富。Prism支持兩種導(dǎo)航:一種是基于狀態(tài)的導(dǎo)航晴竞,現(xiàn)有View的狀態(tài)被更新來(lái)實(shí)現(xiàn)簡(jiǎn)單的導(dǎo)航;一種是View-Switching導(dǎo)航狠半,新的View創(chuàng)建噩死,來(lái)替換掉原來(lái)的View颤难。View-Switching使用URI配合Region來(lái)實(shí)現(xiàn)靈活的導(dǎo)航。
  • EventAggregator已维。復(fù)合程序中的組件通常要與其他組件或者服務(wù)通過(guò)松耦合的方式通信行嗤。為了實(shí)現(xiàn)這個(gè)功能,Prism提供了EventAggregator組件垛耳。通過(guò) 發(fā)布-訂閱 機(jī)制栅屏,實(shí)現(xiàn)組件發(fā)布和訂閱事件,而不需要互相引用堂鲜。EventAggregator通常用來(lái)支持定義在不同Module中的組件通信栈雳。
  • Dependency injection container。Prism使用依賴(lài)注入模式管理組件之間的依賴(lài)缔莲。依賴(lài)注入使得組件之間的依賴(lài)能夠動(dòng)態(tài)的實(shí)現(xiàn)甫恩,并且是可擴(kuò)展,可測(cè)試的酌予。Prism支持的依賴(lài)注入有Unity和MEF磺箕,也可以使用其他的依賴(lài)注入容器通過(guò)ServiceLocator。
  • Services抛虫。Service封裝UI無(wú)關(guān)的功能松靡,例如登錄、異常處理和數(shù)據(jù)獲取建椰。Service能直接在程序中定義或者是在模塊中定義雕欺。Service通常由Dependency injection container注冊(cè),這樣能夠被其他依賴(lài)于Service的組件請(qǐng)求創(chuàng)建棉姐。
  • Controllers屠列。Controller是用來(lái)定義結(jié)構(gòu)和初始化將要顯示在Region中的View的類(lèi)。Controller封裝了哪些Views將被顯示的邏輯伞矩。Controller使用View-Switching的導(dǎo)航機(jī)制笛洛。
  • Bootstrapper。Bootstrapper組件是用來(lái)初始化Prism的組件和服務(wù)的乃坤。它用來(lái)初始化Dependency injection container來(lái)書(shū)冊(cè)任何應(yīng)用程序級(jí)的組件和服務(wù)苛让。同時(shí)他還配置和初始模塊目錄以及Shell的View和View Model。

Prism被設(shè)計(jì)成可以使用上述的功能或設(shè)計(jì)模式湿诊,你可以根據(jù)需要使用一種或多種狱杰。如果你想充分發(fā)揮Prism的優(yōu)點(diǎn),您通常會(huì)使用Prism的許多功能和設(shè)計(jì)模式相互結(jié)合厅须。下面的插圖顯示了一個(gè)典型的Prism應(yīng)用程序體系結(jié)構(gòu)仿畸,展示了Prism的多種功能如何在復(fù)合應(yīng)用程序一起工作。

典型Prism程序

大部分Prism程序有一個(gè)Shell程序和共享服務(wù)組成。Shell程序定義了Region來(lái)顯示頂層的View错沽,共享服務(wù)能夠被加載的模塊訪問(wèn)簿晓。Shell定義了一個(gè)合適的目錄來(lái)決定哪些模塊將在啟動(dòng)時(shí)被加載更合適。同時(shí)一個(gè)依賴(lài)注入容器也被定義甥捺,來(lái)動(dòng)態(tài)的實(shí)現(xiàn)組件依賴(lài)抢蚀。Bootstrapper在程序啟動(dòng)時(shí)注冊(cè)共享服務(wù)和組件镀层。

單獨(dú)的模塊封裝了程序的部分功能镰禾,使用一個(gè)單獨(dú)的呈現(xiàn)模式例如MVVM。當(dāng)模塊被加載時(shí)唱逢,模塊中定義的View會(huì)在Shell中定義的Region里顯示吴侦。在初始化完成之后,用戶(hù)被導(dǎo)航到各種不同的View去坞古。

使用Prism

在前面的文章中备韧,我們已經(jīng)了解了Prism支持的主要功能和設(shè)計(jì)模式,現(xiàn)在我們來(lái)看看如何使用Prism開(kāi)發(fā)一個(gè)新的程序痪枫。這一章節(jié)提供一個(gè)關(guān)于如何創(chuàng)建一個(gè)基礎(chǔ)的Prism程序的總覽织堂。如果你有需要的話(huà),你可以通過(guò)擴(kuò)展這個(gè)基礎(chǔ)程序來(lái)使用其他Prism提供的能力或設(shè)計(jì)模式奶陈。

Prism不僅能輕松新建一個(gè)WPF復(fù)合程序易阳,也可以將Prism用于已有程序中來(lái)使用Prism提供的功能和設(shè)計(jì)模式。

一個(gè)典型的Prism程序由一個(gè)Shell工程和多個(gè)Module工程組成吃粒。下圖展示了使用Prism開(kāi)發(fā)符合程序會(huì)用到的活動(dòng)潦俺。

創(chuàng)建復(fù)合程序的活動(dòng)圖

一個(gè)典型的程序會(huì)使用到大部分甚至是全部的Prism提供的功能或設(shè)計(jì)模式,以此來(lái)享受到使用松耦合和分散關(guān)注點(diǎn)這些設(shè)計(jì)模式原則 帶來(lái)的好處徐勃。然而在本例中事示,我們創(chuàng)建的是一個(gè)基礎(chǔ)的Prism程序,所以只有一個(gè)Module僻肖,該Module只定義了一個(gè)View肖爵。

添加Prism Library的引用
大部分情況下,需要先添加引用到工程中臀脏。使用Visual Studio的NuGet能夠輕松的添加遏匆。

定義Shell

Shell提供給應(yīng)用程序一個(gè)基本的布局。這個(gè)布局使用Region定義以便于后續(xù)由Module中的View顯示谁榜。View也能像Shell一樣幅聘,使用Region定義成可添加內(nèi)容的區(qū)域,如下圖所示窃植。Shell通常設(shè)置整個(gè)程序的外形帝蒿,包含了程序使用的Style。

Shell, Views and Regions

創(chuàng)建Bootstrapper

Bootstrapper使用Prism Library Services和Unity Container或MEF Container同程序聯(lián)系起來(lái)巷怜。每一個(gè)程序都創(chuàng)建一個(gè)指定的Bootstrapper葛超,通常是繼承至UnityBootStrapper或者是MefBootstrapper暴氏。下圖展示了這種關(guān)系。你需要決定使用哪一種來(lái)構(gòu)建模塊目錄绣张。每個(gè)程序至少需要提供一個(gè)模塊目錄和一個(gè)Shell答渔。

默認(rèn)情況下,Bootstrapper使用.NET Framwork Trace類(lèi)記錄事件日志侥涵。大部分程序會(huì)使用自己的日志服務(wù)沼撕,比如Enterprise Library。程序可以在特定的Bootstrapper中使用特定的日志服務(wù)芜飘。

默認(rèn)情況下务豺,UnityBootstrapper和MefBootstrapper允許使用Prism Library Service。這些可以在你自定義的Bootstrapper中禁用或者被替換嗦明。

演示如何連接到Prism Library

創(chuàng)建Module

Module包含程序特定功能的View和服務(wù)笼沥。大多數(shù)情況下,這些是被包含在不同的程序集中娶牌,被不同的團(tuán)隊(duì)開(kāi)發(fā)奔浅。一個(gè)Module是由一個(gè)實(shí)現(xiàn)了IModule接口的類(lèi)表示。此類(lèi)Module诗良,在初始化時(shí)注冊(cè)他們的View和Service而且可能添加一個(gè)或多個(gè)View到Shell汹桦。根據(jù)具體情況,你可能需要為你的模型類(lèi)定義屬性或定義模型之間的依賴(lài)累榜。

添加模塊View到Shell

Module通過(guò)Shell中的Region替換內(nèi)容营勤。在初始化時(shí),Module通過(guò)RegionManager來(lái)定位Shell中的Region然后添加一個(gè)或多個(gè)View到這些Region或者是注冊(cè)一個(gè)或多個(gè)將被Region創(chuàng)建View類(lèi)型壹罚。RegionManager負(fù)責(zé)追蹤程序中的Region葛作,是從Bootstrapper實(shí)現(xiàn)的核心服務(wù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猖凛,一起剝皮案震驚了整個(gè)濱河市赂蠢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辨泳,老刑警劉巖虱岂,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異菠红,居然都是意外死亡第岖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)试溯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蔑滓,“玉大人,你說(shuō)我怎么就攤上這事〖ぃ” “怎么了燎窘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蹄咖。 經(jīng)常有香客問(wèn)我褐健,道長(zhǎng),這世上最難降的妖魔是什么澜汤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任蚜迅,我火速辦了婚禮,結(jié)果婚禮上银亲,老公的妹妹穿的比我還像新娘慢叨。我一直安慰自己纽匙,他們只是感情好务蝠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著烛缔,像睡著了一般馏段。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上践瓷,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天院喜,我揣著相機(jī)與錄音,去河邊找鬼晕翠。 笑死喷舀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淋肾。 我是一名探鬼主播硫麻,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼樊卓!你這毒婦竟也來(lái)了拿愧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碌尔,失蹤者是張志新(化名)和其女友劉穎浇辜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體唾戚,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柳洋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叹坦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熊镣。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轧钓,到底是詐尸還是另有隱情序厉,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布毕箍,位于F島的核電站弛房,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏而柑。R本人自食惡果不足惜文捶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媒咳。 院中可真熱鬧粹排,春花似錦、人聲如沸涩澡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妙同。三九已至射富,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粥帚,已是汗流浹背胰耗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芒涡,地道東北人柴灯。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像费尽,于是被迫代替她去往敵國(guó)和親赠群。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,321評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理依啰,服務(wù)發(fā)現(xiàn)乎串,斷路器,智...
    卡卡羅2017閱讀 134,715評(píng)論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)速警、插件叹誉、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,124評(píng)論 4 61
  • 最近小伙伴之間老喜歡在半夜互相傷害。 美其名曰探討各地美食闷旧, 就是深夜食堂长豁,放毒殺人。 晚上10點(diǎn)半忙灼,時(shí)機(jī)正好匠襟。 ...
    阿念_閱讀 279評(píng)論 2 1
  • 在學(xué)校里午睡钝侠,常常聽(tīng)到忽遠(yuǎn)忽近的飛機(jī)引擎轉(zhuǎn)動(dòng)的聲音,和穿過(guò)云層的空曠聲酸舍。 聲音空靈而有穿透力帅韧,常常讓我感覺(jué)身處云端...
    Miss_soul閱讀 141評(píng)論 0 0