PetShop 4.0架構分析

剛開始打開PetShop項目的時候,我們未免會被如此多的項目嚇一跳,不過只要用心的去分析,看懂它並不是非常難的事。

首先我們來看一下WEB項目,因爲我們做WEB應用程序首先想到的就是看看頁面是怎麼實現的,然後一路追溯下去,直到看明白程序是如何把數據顯示到頁面和如何處理頁面的數據的。

比如說首頁吧,Default.aspx,我們看到首頁很簡單,大多數是靜態的,只顯示了一個Categories菜單,下面是對應的HTML代碼

<PetShopControl:NavigationControl ID="Categories" runat="server"></PetShopControl:NavigationControl>

而這些PetShopControl,NavigationControl標籤是什麼呢,我們可以在頁面HTML代碼的上方看到一行

<%@ Register Src="Controls/NavigationControl.ascx" TagName="NavigationControl" TagPrefix="PetShopControl" %>

指令,通過這行指令我們可以看到Categories菜單是通過NavigationControl.ascx用戶控件實現的

那好,我們現在就來打開 NavigationControl.ascx ,NavigationControl.ascx 裏面有一個Repeater控件,然後我們來看看NavigationControl.ascx的後臺代碼NavigationControl.ascx.cs

頁面初紿化Page_Load調用兩個函數GetControlStyle();BindCategories();

其中GetControlStyle()是爲了實現菜單在首頁和其它頁面顯示不同的風格,BindCategories()方法就是綁定數據了。

BindCategories() {

Category category = new Category();

repCategories.DataSource = category.GetCategories();

repCategories.DataBind();

}

在BindCategories()方法中有個類Category,Category是在BLL項目中實現的,我們可以單擊右鍵點轉到定義快速的找到它,category.GetCategories()方法我們也可以快速的找到它的定義

表現層到這就轉到業務層了,現在我們來看看業務層如何實現Category類,業務層的GetCategories()方法實現如下

public IList<CategoryInfo> GetCategories() {

return dal.GetCategories();

}

而變量 dal 在類中有定義

private static readonly ICategory dal = PetShop.DALFactory.DataAccess.CreateCategory();

然後我們再看到PetShop.DALFactory.DataAccess.CreateCategory()

在DataAccess類的CreateCategory()方法中我們所看到的並沒有具體的數據操作,取而代之的是

string className = path + ".Category";

return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);

我們可以看到 path 的定義

private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];

path是WEB.config中定義的WebDAL節點值,我們來看看Web.config中的WebDAL值,如果裝的是SQL數據庫的話應該是 “PetShop.SQLServerDAL”

原來語句“Assembly.Load(path).CreateInstance(className)”就是通過Web.config配置來實例化PetShop.SQLServerDAL集合中的Category類,然後我們纔在PetShop.SQLServerDAL.Category看到方法GetCategories()的具體實現

但是何必運用如此煩雜的步驟來實現對數據的操作呢,細想一下,不同的用戶有不同的數據庫,例如我們可以使用SQL SERVER,也可以使用Oracle數據庫,爲了輕鬆的實現對不同數據庫的訪問而不修改業務層,降低各層之間的偶合,所以PetShop運用了設計模式中的抽象工廠模式Factory,而爲什麼表現層和業務層之間不需要這樣做,因爲業務層的業務規則一般都是固定的,所以沒必要寫幾個業務層,如果應用程序中的業務層是時常變動的,或開發的是通用的WEB應用程序,針對不同的企業有不同的業務層,而表現層卻一樣,也可以運用抽象工廠模式。

PetShop的整體架構就是這樣子了,可以說這是經典的三層架構啦!! 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章