剛開始打開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()的具體實現