隨著Ajax的流行,現在的項目使用Ajax已經很普遍了,可以說是大量的使用Ajax了。由於存在大量的Ajax請求,變得難於管理。於是我們經常統一請求,唯一頁面或者唯一的入口。於是便有以下類似的代碼:
public partial class Ajax : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string comm = Request["comm"]; if ("editUserInfo".Equals(comm)) { EditUserInfo(); } else if ("addUserInfo".Equals(comm)) { AddUserInfo(); } …… else if ("deleteUserInfo".Equals(comm)) { DeleteUserInfo(); } Response.End(); } public void EditUserInfo() { …… } ……}
隨著客戶需求的變化、二期開發,也許有著更多的Ajax請求,這將製造了龐大的if…else if… … else if…,同時每個請求都有
相應的操作,這將造成這個類過於龐大,不利於管理、理解。
Factory模式正適用於這種場合。它使用一個類封裝建立邏輯和客戶代碼的執行個體化/配置選項。UML圖如下(用word畫,不是很標準):
樣本:
一、建立抽象類別AjaxComm。
public abstract class AjaxComm{ public HttpRequest Request =HttpContext.Current.Request; public HttpResponse Response = HttpContext.Current.Response; public abstract void Execute();}
二、Factory類,根據使用者請求的Comm命令,建立相應的類,並執行相應的操作。
public partial class Ajax : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { string comm = Request["comm"];
//根據comm建立相應的類。類的命令規則:比如comm為“AddUser“,則相應的類名為“AddUserComm” AjaxComm ajaxComm = (AjaxComm)Assembly.Load("Web").CreateInstance("Web.Ajax." + comm+"Comm"); if (ajaxComm != null) { ajaxComm.Execute(); } Response.End(); }}
三、實現相應的命令類。
public class EditImgComm:AjaxComm{ public override void Execute() { …… Response.Write("Success"); }}
# 優點與缺點#
+合并建立邏輯和執行個體化/配置選項。
+將客戶代碼與建立邏輯解耦。
-如果可以直接執行個體化,會使設計複雜化。