欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

一個(gè)自定義MVP.net框架AngelFrame-創(chuàng)新互聯(lián)

摘要:本篇是本人在完成.net平臺(tái)下一個(gè)項(xiàng)目時(shí),對(duì)于MVP框架引發(fā)的一些思考,以及開發(fā)了一個(gè)小型的配置型框架,名字叫作AngelFrame。這個(gè)項(xiàng)目屬于前端桌面管理系統(tǒng)的一部分,最終要集成進(jìn)去。

關(guān)鍵詞:    .net,F(xiàn)ramwork,MVP,框架,c#

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比漢中網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式漢中網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋漢中地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。前提:     當(dāng)前有很多成熟的.net Plugin Framework,如MEF、SCSF、Sharpdevelop和OSGi.net等,它們?cè)诠δ苌细饔刑厣P枨螅?      1、開發(fā)的項(xiàng)目或者說(shuō)模塊屬于一個(gè)大系統(tǒng)的一部分,它需要最終集成于大系統(tǒng)中,比如一個(gè)大系統(tǒng)的用戶管理功能模塊。          2、大系統(tǒng)采用的框架.net Plugin Framework并不確定,有可能是SCSF,也有可能是MEF。因此此模塊不推薦使用任何大型框架(代碼、實(shí)例化過(guò)程不可控)。          3、然而不采用任何的框架會(huì)導(dǎo)致,寫出來(lái)的看起來(lái)很混亂,界面與邏輯雜堆在一起,smelly,與我們的審美情調(diào)格格不入。說(shuō)明:      這時(shí)一個(gè)適用的框架可以幫大忙。              只需在項(xiàng)目中引用Framework.dll、Microsoft.Practices.CompositeUI.dll、Microsoft.Practices.ObjectBuilder.dll,就可以在項(xiàng)目中迅速部署MVP模式,發(fā)布并且訂制事件,從而徹底實(shí)現(xiàn)解耦。             在后期集成到大系統(tǒng)中的過(guò)程中,使用也極為方便。

1、MVP的具體實(shí)現(xiàn)

    使用MVP的目的是為了實(shí)現(xiàn)類之間的松耦合,其中SCSF提供了完善的實(shí)現(xiàn)機(jī)制。有時(shí)因?yàn)轫?xiàng)目要求不使用SCSF框架,而拋卻MVP帶來(lái)的代碼整潔性、松耦合性實(shí)屬不該。故編寫適合自己使用的,用來(lái)實(shí)現(xiàn)MVP模式的框架是有必要的。

    這里介紹框架AngelFrame及其使用方法,它功能小巧,易于擴(kuò)展,使用方便。下圖是MVP的具體實(shí)現(xiàn)、使用的結(jié)構(gòu)圖,它包含了Model、View、IView、Presenter以及EventPublication和EventSubscription。

2、AngelFrame的使用示例

   下面是一個(gè)小例子,它使用AngelFrame框架,按照如下的代碼編輯,可以實(shí)現(xiàn)界面快速訂制。

?下面的Form1是我們將要實(shí)現(xiàn)的主界面。它分成左右兩區(qū),分別命名為UC1,UC2。其中UC1又分成左右兩區(qū),其中右區(qū)命名為UC3。點(diǎn)擊UC1上的按鈕,可以彈出一個(gè)對(duì)話框。在松耦合的情況下,UC1、UC2、UC3的實(shí)例均可被靈活替換成其它實(shí)例,只要它們實(shí)現(xiàn)相同的接口IUC1、IUC2、IUC3即可。

2.1   Form1的實(shí)現(xiàn)代碼片段

1 2 3 4 5 6 public interface IForm1 { void ShowDialog(); IUC1 UC1 {set; } IUC2 UC2 {set; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public partial class Form1 : Form, IForm1 { private IUC1 _uc1; public IUC1 UC1 { set { _uc1 = value; ((Control)_uc1).Dock = DockStyle.Fill; panelEx1.Controls.Add((Control)_uc1); } }   private IUC2 _uc2; public IUC2 UC2 { set { _uc2 = value; ((Control)_uc2).Dock = DockStyle.Fill; panelEx2.Controls.Add((Control)_uc2); } }   public new void ShowDialog() { base.ShowDialog(); // MessageBox.Show("hello , i am view1.form1 !"); } }

     代碼說(shuō)明:在panelEx1上添加UC1,在panelEx2上添加UC2;這里的實(shí)例化及實(shí)例賦值都由AngelFrame管理,采用依賴注入IOC設(shè)計(jì)模式。

2.2   UC1的實(shí)現(xiàn)代碼片段

1 2 3 4 5 6 7 public interface IUC1 { void ShowDialog1(); IUC3 UC3 {set; } [EventPublication("U", PublicationScope.Global)] event EventHandler AfterClickButton; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public partial class UC1 : UserControl, IUC1 { private IUC3 _uc3; public IUC3 UC3 { set { _uc3 = value; ((Control)_uc3).Dock = DockStyle.Fill; panelEx1.Controls.Add((Control)_uc3); } }   public void ShowDialog1() { MessageBox.Show(“I am view1.uc1 ! "); }   [EventPublication("TestEvent", PublicationScope.Global)] public event EventHandler AfterClickButton; private void buttonX1_Click(object sender, System.EventArgs e) { if (AfterClickButton !=null) AfterClickButton(this, e); }
1 2 3 4 5 6 7 8 public class PUC1 : MPresenter<IUC1> { [EventSubscription("TestEvent", ThreadOption.UserInterface)] private void OnAfterClickButton(object sender, EventArgs args) { View.ShowDialog1(); } }

       代碼說(shuō)明:可以看出在panelEx1上添加UC3,UC1中存在一個(gè)事件發(fā)生器,它只負(fù)責(zé)在點(diǎn)擊按鈕的時(shí)候拋出事件。這里,具體的事件捕獲代碼放在PUC1上,而它可以直接  訪問UC1,從而彈出對(duì)話框。

2.3  配置文件App.config代碼片段

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <Framework> <objects> <object name="Form1" assembly="View1.dll" className="View1.Views.Form1"> <property name="UC1" refObject ="thisIsUC1"/> <property name="UC2" refObject ="thisIsUC2"/> </object>   <object name="thisIsUC1" assembly="View1.dll" className="View1.Views.UC1"> <property name="UC3" refObject ="thisIsUC3"/> </object>   <object name="thisIsUC2" assembly="View1.dll" className="View1.Views.UC2"/> <object name="thisIsUC3" assembly="View3.dll" className="View3.UC3"/>   <object name="thisIsPUC1" assembly="View1.dll" className="View1.Presenters.PUC1"> <property name="View" refObject ="thisIsUC1"/> </object> </objects> <contexts> <context refObject ="thisIsPUC1" /> </contexts> </Framework>

    代碼說(shuō)明:這是最重要的一環(huán),所有的依賴注入IOC都是從這里開始的。在這里可以隨意的搭配界面,各個(gè)小模塊可以被靈活的替換,只要它們實(shí)現(xiàn)了同一個(gè)接口。

        

         從上圖中可以看出,兩者的UC3發(fā)生了替換,左側(cè)是一個(gè)日歷,右側(cè)是一個(gè)表盤,只要將上述的App.config代碼段中<object name="thisIsUC3" assembly="View3.dll" className="View3.UC3"/>改為<object name="thisIsUC3" assembly="View1.dll" className="View1.Views.UC3"/>即可達(dá)到這樣的效果。

3、總結(jié)

以上就是框架AngelFrame的使用方法、實(shí)現(xiàn)效果,AngelFrame雖小,但它提供了這些最基本最實(shí)用的開發(fā)模式,方便開發(fā)者專注于實(shí)現(xiàn)業(yè)務(wù)流程。

關(guān)于AngelFrame的具體實(shí)現(xiàn)可以參見代碼,如需其它功能,可以進(jìn)行進(jìn)一步擴(kuò)展,如有需要代碼的可以直接留言或跟本人聯(lián)系,希望大家交流,完善AngelFrame。

來(lái)自為知筆記(Wiz)

作者:Angel 出處:http://www.cnblogs.com/wgp13x/ 歡迎轉(zhuǎn)載或分享,但請(qǐng)務(wù)必聲明文章出處。如果文章對(duì)您有幫助,希望你能推薦或關(guān)注。

王安琪,英文名Angel,南京郵電大學(xué)計(jì)算機(jī)應(yīng)用技術(shù)碩士學(xué)位。 熟悉Java、C#編程語(yǔ)言。專注于WebService、海量數(shù)據(jù)處理、搜索引擎技術(shù)、消息中間件技術(shù)、分布式文件存儲(chǔ)、.NET應(yīng)用程序開發(fā)、系統(tǒng)架構(gòu)設(shè)計(jì)。主要從事大數(shù)據(jù)管理系統(tǒng)的研發(fā),項(xiàng)目經(jīng)理,系統(tǒng)架構(gòu)師,就職于江蘇金陵科技集團(tuán)有限公司。

Email:aitanjupt@hotmail.com

QQ:289770363

網(wǎng)站標(biāo)題:一個(gè)自定義MVP.net框架AngelFrame-創(chuàng)新互聯(lián)
路徑分享:http://chinadenli.net/article28/piocp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)云服務(wù)器軟件開發(fā)網(wǎng)站排名面包屑導(dǎo)航Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)