對PureMVC的認識是從學習Flex開始的,關於它的資料實在是少得可憐,只有官網上的一個PDF,而且寫得也不夠詳細。我以前的一篇文章PureMVC的原理和邏輯提到了,PureMVC只是一個純框架而已,那麼他自然也是支持ASP.NET的了。但是在網上卻根本找不到PureMVC在C#方面的應用的資料。有熱心的讀者看了我先前的文章後,希望我能做個C#的Demo出來。其實,這已經是我計劃中的事情了,但由於一直都很忙,直到現在才好不容易擠出點時間寫了個ASP.NET的Demo。Demo是我一貫喜歡做的登錄實例,我個人覺得,對於Web應用,登錄功能是最好的入門實例了。
Demo是使用PureMVC開發的,如果讀者對PureMVC還不太了解,建議先看一下官網的Best Pratice,對PureMVC的結構有個大概的了解。接下來我將詳細的講解Demo的實現。
首先是MyFacade類(名字是隨便取的),這個類繼承父類org.puremvc.csharp.patterns.facade,用於管理整個應用程序的MVC,在MyFacade類中定義了一個方法:
Code
/// <summary>
/// 單例模式實例化對象
/// </summary>
/// <returns></returns>
new public static MyFacade getInstance()
{
if (Instance == null)
{
Instance = new MyFacade();
}
return Instance;
}
使用單例模式實例化MyFacade類,由於PureMVC使用的是Java的命名規范,所以getInstance方法的首字母是小寫的,用它來覆蓋父類的同名方法。在PureMVC中,所有的Command,Mediator,Proxy都要注冊後才能夠使用。
Code
/// <summary>
/// 初始化Controller,注冊需要使用到的Command
/// </summary>
protected override void initializeController()
{
base.initializeController();
registerCommand(MyFacade.DEFAULTSTARTUP, typeof(DefaultPageCommand));
}
initializeController方法用來初始化Controller,因為Controller負責管理Command,可以在這個方法裡面注冊需要使用到的Command。因為網頁不同於Flex,它是多頁面的應用,所以我為每個頁面都注冊一個單獨的Command,用來注冊頁面中需要用到的其它Command。因為這個Demo只實現了一個功能,所以只在這裡注冊了一個頁面級的DefaultPageCommand。雖然這裡也可以注冊其它的Command,但是,我建議為每一個頁面創建一個頁面級的Command類,在這個類裡面注冊其它頁面中需要使用到的Command,這樣更方便於管理和分類。
Code
protected override void initializeModel()
{
base.initializeModel();
registerProxy(new UserProxy());
}
initializeModel方法和initializeModel方法的原理是一樣的,只是它注冊的是Proxy而已。Proxy用於訪問數據模型,存取數據,相當於平時的數據訪問層吧。這裡我只用到了UserProxy類,用於讀取用戶的信息。
Code
/// <summary>
/// 啟動頁面,注冊其它類
/// </summary>
/// <param name="page"></param>
public void DefaultPage(Page page)
{
sendNotification(MyFacade.DEFAULTSTARTUP, page);
}