.Net Petshop详解(二):petshop三层结构之DataTier
交互的三層綜述
?
在前面的文章中,我們叢整個系統的角度了解了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中列出了這些表之間的關系和主鍵信息。
?
?
?
圖2:petshop數據庫物理設計模式
?
技巧:其實對于從事過數據庫建模和設計的人都知道,得到上面的數據庫模型圖形并不是一件很困難的事情。正如我們前面提到的一樣,我們可以用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 | 獲取用戶配置信息。 |
?
表2:petshop存儲過程列表
?
在這些存儲過程里面使用了SQL Server2000的OpenXML的特性來代替傳統的行集結果,使用在非常頻繁的數據訪問操作,可以減輕系統的負擔。
好了,petshop的Datatier就說到這里了,在后面的文章我會就一個數據訪問的實例再次解說存儲過程的執行。接下來我將就中間層做介紹了。
轉載于:https://www.cnblogs.com/xoray007/archive/2010/05/22/1741789.html
總結
以上是生活随笔為你收集整理的.Net Petshop详解(二):petshop三层结构之DataTier的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编辑器推荐KindEditor
- 下一篇: 在Windows 7 下使用Visual