[轉]PetShop 4架構分析

剛開始打開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的整體架構就是這樣子了,可以說這是經典的三層架構啦!!

由於整體已經有22個項目,所以,對於初學者一看就暈了,所以,我做了分解,可以大體上分幾塊去理解。

序號

項目名稱

描述

1

WEB

表示層

2

Model

業務實體

3

BLL

業務邏輯層

4

DALFactory

數據層的抽象工廠

5

IDAL

數據訪問層接口定義

6

SQLServerDAL

SQLServer數據訪問層

7

OracleDAL

Oracle數據訪問層

8

DBUtility

數據庫訪問組件基礎類

9

CacheDependencyFactory

緩存依賴類的工廠類

10

ICacheDependency

緩存依賴類接口

11

TableCacheDependency

緩存依賴實現類

12

IBLLStrategy

同步/異步處理策略接口(實現在bll根據配置反射選擇)

13

MessagingFactory

異時處理消息隊列的抽象工廠

14

IMessaging

異時處理消息隊列接口定義

15

MSMQMessaging

異時處理消息隊列的實現

16

Profile

Profile的數據訪問層

17

ProfileDALFactory

ProfileDAL的工廠類(反射創建ProfileDAL)

18

IProfileDAL

Profile的數據訪問層接口定義

19

OracleProfileDAL

Oracle的Profile Providers

做用戶狀態管理

20

SQLProfileDAL

SQL Server 的Profile Providers

做用戶狀態管理

21

Membership

Membership認證和授權管理

22

OrderProcessor

後臺處理進程,處理訂單隊列

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