關(guān)鍵詞: .net,F(xiàn)ramwork,MVP,框架,c#
使用MVP的目的是為了實現(xiàn)類之間的松耦合,其中SCSF提供了完善的實現(xiàn)機制。有時因為項目要求不使用SCSF框架,而拋卻MVP帶來的代碼整潔性、松耦合性實屬不該。故編寫適合自己使用的,用來實現(xiàn)MVP模式的框架是有必要的。
這里介紹框架AngelFrame及其使用方法,它功能小巧,易于擴展,使用方便。下圖是MVP的具體實現(xiàn)、使用的結(jié)構(gòu)圖,它包含了Model、View、IView、Presenter以及EventPublication和EventSubscription。
下面是一個小例子,它使用AngelFrame框架,按照如下的代碼編輯,可以實現(xiàn)界面快速訂制。
?下面的Form1是我們將要實現(xiàn)的主界面。它分成左右兩區(qū),分別命名為UC1,UC2。其中UC1又分成左右兩區(qū),其中右區(qū)命名為UC3。點擊UC1上的按鈕,可以彈出一個對話框。在松耦合的情況下,UC1、UC2、UC3的實例均可被靈活替換成其它實例,只要它們實現(xiàn)相同的接口IUC1、IUC2、IUC3即可。
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 !");
}
}
|
代碼說明:在panelEx1上添加UC1,在panelEx2上添加UC2;這里的實例化及實例賦值都由AngelFrame管理,采用依賴注入IOC設計模式。
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();
}
}
|
代碼說明:可以看出在panelEx1上添加UC3,UC1中存在一個事件發(fā)生器,它只負責在點擊按鈕的時候拋出事件。這里,具體的事件捕獲代碼放在PUC1上,而它可以直接 訪問UC1,從而彈出對話框。
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 >
|
代碼說明:這是最重要的一環(huán),所有的依賴注入IOC都是從這里開始的。在這里可以隨意的搭配界面,各個小模塊可以被靈活的替換,只要它們實現(xiàn)了同一個接口。
從上圖中可以看出,兩者的UC3發(fā)生了替換,左側(cè)是一個日歷,右側(cè)是一個表盤,只要將上述的App.config代碼段中<
object
name
=
"thisIsUC3"
assembly
=
"View3.dll"
className
=
"View3.UC3"
/>
改為<
object
name
=
"thisIsUC3"
assembly
=
"View1.dll"
className
=
"View1.Views.UC3"
/>即可達到這樣的效果。
以上就是框架AngelFrame的使用方法、實現(xiàn)效果,AngelFrame雖小,但它提供了這些最基本最實用的開發(fā)模式,方便開發(fā)者專注于實現(xiàn)業(yè)務流程。
關(guān)于AngelFrame的具體實現(xiàn)可以參見代碼,如需其它功能,可以進行進一步擴展,如有需要代碼的可以直接留言或跟本人聯(lián)系,希望大家交流,完善AngelFrame。
來自為知筆記(Wiz) 作者:Angel 出處:http://www.cnblogs.com/wgp13x/ 歡迎轉(zhuǎn)載或分享,但請務必聲明文章出處。如果文章對您有幫助,希望你能推薦或關(guān)注。王安琪,英文名Angel,南京郵電大學計算機應用技術(shù)碩士學位。 熟悉Java、C#編程語言。專注于WebService、海量數(shù)據(jù)處理、搜索引擎技術(shù)、消息中間件技術(shù)、分布式文件存儲、.NET應用程序開發(fā)、系統(tǒng)架構(gòu)設計。主要從事大數(shù)據(jù)管理系統(tǒng)的研發(fā),項目經(jīng)理,系統(tǒng)架構(gòu)師,就職于江蘇金陵科技集團有限公司。
Email:aitanjupt@hotmail.com
QQ:289770363
網(wǎng)站標題:一個自定義MVP.net框架AngelFrame-創(chuàng)新互聯(lián)
路徑分享:http://aaarwkj.com/article28/piocp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、云服務器、軟件開發(fā)、網(wǎng)站排名、面包屑導航、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容