Net Petshop詳解(二)

交互的三層綜述
 
在前面的文章中,我們叢整個系統的角度瞭解了petshop的三層部署結構物理上的一個概貌,沒有從應用程序的角度來說明是如何劃分的,也不清楚數據展示層,中間層,數據層是如何交互的。爲了更好的說明這個三層的結構以及每一層的具體細節問題,也讓大家對整個應用有一個walkthrough,在這裏我將說明從系統的角度來看(見參考圖1),顧客在購物的過程中,系統的三層是如何的工作以及如何的交互。這個東西有點象UML裏面的實例情景故事,對需求和分析的進一步是大有幫助的。
 
圖1 .NET Petshop 架構
 
從這個情景中,我們可以很清晰的瞭解到Internet Customer在購物時系統的運作情形。首先通過數據展示層的用戶交互界面Cart.aspx頁面輸入顧客購買的商品以及數量,然後這些購物清單由後臺的應用程序(cart.aspx.cs)做相應的預處理(如安全驗證,校驗,數據的格式化等等),接着調用中間件(在程序結構裏面就是一些.NET Assembly,封裝了購物的商業邏輯),最後通過數據訪問接口來更新數據庫裏面的數據(數據層)。
 
數據層(Database)
 
.NET Petshop的數據庫並不是十分的龐大,總共有12個用戶表和23個存儲過程。Petshop數據庫裏面存儲的是用戶數據,帳號數據,產品數據,用戶配置數據,訂單數據,庫存數據以及供應商的數據。應用程序訪問數據庫的數據並不是直接的與數據庫表打交道,而是通過存儲過程的運行來獲取所需要的數據。這樣的設計有一個好處就是,避免了頻繁的表操作,而通過運行在服務器端的存儲過程可以極大的提高運作效率和提升訪問數據的速度,同時也很好的屏蔽了數據庫表的邏輯,使得數據庫訪問變成了數據庫提供的服務訪問。當然,也有人指責說這些存儲過程遷移性是值得懷疑的。
下面我將通過表格把這些數據庫的基本表列出來(見表1),並一一做說明,希望對大家深入的理解有幫助。

表名稱
備註信息
Account
基本用戶信息。
BannerData
存儲的是系統界面的banner圖片的設置信息。
Category
寵物的類別目錄表(比如魚類,狗類等等)。
Inventory
寵物產品的存貨信息。
Item
單個產品的詳細信息。
LineItem
訂單的每一項的詳細信息,包括產品名稱和數量,價格等。
Orders
用戶購物的訂單,一個訂單可以包括多項LineItem
OrderStatus
訂單的狀態
Product
寵物的產品列表,一條Product可能包括多個Item
Profile
用戶配置表,用於記錄他們的favorites
Signon
用戶帳號登陸表,因爲常用,故從Account獨立出來。
Supplier
供應商信息。
 
通過上表我們知道了petshop數據庫的數據庫表的一些信息,但是這些表之間到底是一種什麼樣的關係呢?關心數據庫建模和設計的人可能對這個問題比較感興趣。在這裏,我將給出圖表(圖2)說明這些數據庫表之間的關係。圖2中列出了這些表之間的關係和主鍵信息。
 
 
 
圖2petshop數據庫物理設計模式
 
技巧:其實對於從事過數據庫建模和設計的人都知道,得到上面的數據庫模型圖形並不是一件很困難的事情。正如我們前面提到的一樣,我們可以用Visio做工程反轉就可以得到上面這麼美觀的設計模型圖了。同時,我們也可以在模型圖中做修改設計,可以馬上應用到你的物理數據庫,使其保持同步。
 
說完了基本的數據庫表,接下來我們看看存儲過程。用微軟的話說,只有設計稱存儲過程,纔算是”cleaner separation of code from the middle-tier”,我個人覺得這樣做是很好的。同樣的,我把它列在一個表格裏(表2)。
 

存儲過程名稱
備註信息
upAccountAdd
增加一個帳號。
upAccountGetAddress
獲取用戶的地址,主要用於下訂單時註冊地址與送貨地址不一。
upAccountGetDetails
獲取帳號的詳細信息。
upAccountLogin
用戶登陸驗證。
upAccountUpdate
更新用戶帳號。
upCategoryGetList
獲取某個類別的產品列表。
upInventoryAdd
增加指定的項到存活信息。
upInventoryGetList
獲取存貨列表。
upItemAdd
增加一項產品。
upItemGetDetails
獲取指定產品項的詳細信息。
upItemGetList
獲取某一特定類別的產品的具體項目列表。
upItemGetList_ListByPage
功能與上同,但是分頁獲取數據。
upOrdersAdd
增加一項訂單。
upOrdersGet
獲取某一訂單的信息。
upOrdersGetDetails
獲取某一訂單的詳細信息。
upOrderStatusGet
獲取訂單的狀態。
upProductAdd
增加一類別產品。
upProductGetList
返回某類產品的列表。
upProductGetList_ListByPage
與上同,但是分頁獲取結果數據。。
upProductSearch
產品搜索。
upProductSearch_ListByPage
與上同,但是翻頁獲取結果數據。
upProfileGetBannerOption
Banner的配置信息。
upProfileGetListOption
獲取用戶配置信息。
 
2petshop存儲過程列表
 
在這些存儲過程裏面使用了SQL Server2000OpenXML的特性來代替傳統的行集結果,使用在非常頻繁的數據訪問操作,可以減輕系統的負擔。
好了,petshopDatatier就說到這裏了,在後面的文章我會就一個數據訪問的實例再次解說存儲過程的執行。接下來我將就中間層做介紹了。
 
發佈了67 篇原創文章 · 獲贊 2 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章