電子商務網站(網上商店PetShop)

? ? ? ? PetShop是一個范例,微軟用它來展示.Net企業系統開發的能力。PetShop隨著版本的不斷更新,至現在基于.Net2.0的PetShop 4.0為止,整個設計逐漸變得成熟而優雅,有很多可以借鑒之處。PetShop是一個小型的項目,系統架構與代碼都比較簡單,卻也凸現了許多頗有價值的設計與開發理念。

1.PetShop項目標準B/S分層式結構圖?

? ? ? ? PetShop的表示層是用ASP.Net設計的,也就是說,它應是一個B/S系統。在.Net中,標準的B/S分層式結構如圖1所示。

圖1 Net中標準的BS分層式結構?

2.?PetShop 2.0的體系架構

? ? ? ? 隨著PetShop版本的更新,其分層式結構也在不斷完善,例如PetShop 2.0,就沒有采用標準的三層式結構。如圖2所示。

?圖2?PetShop2.0的體系架構

? ? ? ? 從圖2中可以看到,并沒有明顯的數據訪問層設計。這樣的設計雖然提高了數據訪問的性能,但也同時導致了業務邏輯層與數據訪問層的職責混亂。一旦要求支持的數據庫發生變化,或者需要修改數據訪問的邏輯,由于沒有清晰的分層,會導致項目做大的修改。而隨著硬件系統性能的提高,以及充分利用緩存、異步處理等機制,分層式結構所帶來的性能影響幾乎可以忽略不計。

3.?PetShop 3.0的體系架構

? ? ? ? PetShop 3.0糾正了此前層次不明的問題,將數據訪問邏輯作為單獨的一層獨立出來。PetShop 3.0的體系架構如圖3所示。? ? ? ?

?圖3?PetShop 3.0的體系架構

4.?PetShop 4.0的體系架構?

? ? ? ? ?PetShop 4.0基本上延續了3.0的結構,但在性能上作了一定的改進,引入了緩存和異步處理機制,同時又充分利用了ASP.Net 2.0的新功能Membership。因此,PetShop 4.0的系統架構如圖4所示。

圖4?PetShop 4.0的體系架構?

4.1?數據訪問層的模塊結構圖?

? ? ? ? 比較3.0和4.0的系統架構圖,其核心的內容并沒有發生變化。在數據訪問層(DAL)中,仍然采用DAL?Interface抽象出數據訪問邏輯,并以DAL Factory作為數據訪問層對象的工廠模塊。對于DAL?Interface而言,分別有支持MS-SQL的SQL Server DAL和支持Oracle的Oracle DAL具體實現,而Model模塊則包含了數據實體對象,其詳細的模塊結構如圖5所示。

圖5?數據訪問層的模塊結構圖?

? ? ? ? ?可以看到,在數據訪問層中,完全采用了“面向接口編程”思想。抽象出來的IDAL模塊,脫離了與具體數據庫的依賴,從而使得整個數據訪問層有利于數據庫遷移。DALFactory模塊專門管理DAL對象的創建,便于業務邏輯層訪問。SQLServerDAL和OracleDAL模塊均實現IDAL模塊的接口,其中包含的邏輯就是對數據庫的Select、Insert、Update和Delete操作。因為數據庫類型的不同,對數據庫的操作也有所不同,代碼也會因此有所區別。

4.2業務邏輯層的模塊結構圖?

? ? ? ? 此外,抽象出來的IDAL模塊,除了解除了向下的依賴之外,對于其上的業務邏輯層同樣僅存在弱依賴關系,如圖6所示。

圖6?業務邏輯層的模塊結構圖?

? ? ? ? 圖6中,BLL是業務邏輯層的核心模塊,它包含了整個系統的核心業務。在業務邏輯層中,不能直接訪問數據庫,而必須通過數據訪問層。注意,圖6中對數據訪問業務的調用,是通過接口模塊IDAL來完成的。既然與具體的數據訪問邏輯無關,則層與層之間的關系就是松散耦合的。如果此時需要修改數據訪問層的具體實現,只要不涉及IDAL的接口定義,那么業務邏輯層就不會受到任何影響。畢竟,具體實現的SQLServerDAL和OracleDAL根本就與業務邏輯層沒有半點關系。

? ? ? ? 因為在PetShop 4.0中引入了異步處理機制,插入訂單的策略可以分為同步和異步,兩者的插入策略明顯不同。但對于調用者而言,插入訂單的接口是完全一樣的,所以PetShop 4.0中設計了IBLLStrategy模塊中,僅僅是簡單的IOrderStrategy,但同時也給出了一個范例和信息,那就是在業務邏輯的處理中,如果存在業務操作的多樣化或者是今后可能的變化,均應利用抽象的原理、或者使用接口、或者使用抽象類,從而脫離對具體業務的依賴。不過在PetShop中,由于業務邏輯相對簡單,這種思想體現得不夠明顯。也正因為此,PetShop將核心的業務邏輯都放到了一個模塊BLL中,并沒有將具體的實現和抽象嚴格地按照模塊分開。所以表示層和業務邏輯層之間的調用關系,其耦合度相對較高。

4.3表示層的模塊結構??

? ? ? ? 圖7表示層的模塊結構圖中,各個層次中還引入了輔助的模塊,如數據訪問層的Messaging模塊,是為異步插入訂單的功能提供,采用了MSMQ(Microsoft?Messaging?Queue·)技術,而表示層的CacheDependency則提供緩存功能。?

圖7?表示層的模塊結構?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19429.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙OS開發:【一次開發,多端部署】(分欄控件)

一多分欄控件 介紹 本示例分別展示了多場景下,一多分欄控件的響應式變化效果。 本示例分別用到了[SideBarContainer]組件與[Navigation]組件,對應使用場景如下: ABC:即SideBarContainer組件組合Navigation組件AC:S…

Python開發 —— 文件讀寫操作open與with open

在 Python 中,文件讀寫操作是非常常見的任務。本文是一些關鍵操作和代碼示例,包括如何使用 open、with open、read 和 write 函數進行文件操作。 1. 打開文件 (open) 使用 open 函數打開文件。在 Python 中,打開文件是進行文件操作的第一步。…

繼承與多態2

2.5(楊.丹尼爾梁英文第11版P537:*13.12)(幾何對象的面積求和)寫一個方法,將數組中所有幾何對象的面積求和。 方法簽名是: 公共靜態雙求和區域(幾何對象【】a) 編寫一個測試程序&…

高速數據傳輸新紀元?ADT-Link領先推出USB4轉PCIe 4.0橋接板

在科技飛速發展的今天,數據傳輸速度一直是推動行業進步的關鍵驅動力。最近,備受矚目的硬件制造商ADT-Link宣布推出一款引領潮流的新產品——USB4轉PCIe 4.0橋接板,這一創新設備勢必會顯著提升數據傳輸效率,為用戶帶來前所未有的高…

NI PXIe-7857R與PXIe-8842的區別

一、NI PXIe-7857R 類型: FPGA模塊:基于FPGA的可編程I/O模塊。 主要功能: FPGA處理:包含Xilinx Kintex-7 FPGA,支持自定義邏輯和處理。 I/O接口:提供豐富的模擬和數字I/O通道。 高速數據處理&#xff1a…

軟件測試新手要達到一個什么水平才能找到一份9K的工作?

我的讀者里有很多 軟測 新人,新人是指正在學 測試 的、以及工作時間不長的年輕人,他們經常問我一個問題: 自學到什么程度才能找到一份還不錯的測試工作? 今天我就從我自己面試新人的角度來回答一下,我會把面試的知識點…

查詢指定會話免打擾

查詢指定用戶(requestId) 為指定會話(targetId)的設置的免打擾狀態。 提示 該設置為用戶級別設置。對應的設置接口詳見設置指定會話免打擾。 請求方法 POST: https://數據中心域名/conversation/notification/get.json 頻率限…

AVFrame結構體分析

AVFrame是FFmpeg中的一個核心數據結構,用于表示音頻或視頻的幀。它包含了一系列用于描述幀數據和元數據的字段。以下是對AVFrame結構體的詳細分析,包括其主要字段及其作用。 AVFrame的定義 在FFmpeg的源代碼中,AVFrame的定義可以在avframe.…

Nginx網頁服務

nginx的配置: 1、全局塊:全局配置,對全局生效; 2、events塊:配置影響 Nginx 服務器與用戶的網絡連接; 3、http塊:配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置&#xf…

【Python編程實踐2/3】Python圖像處理模塊(上)

目錄 引言 目標 安裝模塊 Windows系統 macOS系統 路徑 Windows路徑 ?編輯macOS路徑 windows路徑報錯 windows路徑前的r 示例代碼 windows快速查看路徑 macOS快速查看路徑 打開圖片 展示圖片 下節預告 總結 引言 歡迎各位大佬垂閱本篇Python實踐博客&a…

【教學類-59-01】專注力視覺訓練01(圓點百數圖)

背景需求: 視覺訓練的神奇效果,讓你的寶貝成為焦點 - 小紅書魔法視覺追蹤-視覺訓練—— 🔍視覺訓練🔍 🔹想要提高寶寶的專注力,視覺訓練是個絕佳方法! 🔹讓寶寶仔細觀察數字的路線&a…

微信小程序畢業設計-農場驛站平臺系統項目開發實戰(附源碼+論文)

大家好!我是程序猿老A,感謝您閱讀本文,歡迎一鍵三連哦。 💞當前專欄:微信小程序畢業設計 精彩專欄推薦👇🏻👇🏻👇🏻 🎀 Python畢業設計…

HoneyTrap蜜罐系統實踐操作@FreeBSD

HoneyTrap介紹 HoneyTrap是一個可擴展的開源系統,用于運行、監控和管理蜜罐。 HoneyTrap蜜罐系統通過在網絡中部署感應節點,實時感知周邊網絡環境,并將感應節點的日志進行實時存儲和可視化分析,從而實現對網絡環境中威脅情況的感…

Honor of Kings 2024.03.29 Ban for 3 day

我又被舉報消極然后禁賽 都說了別選蔡文姬,對面三個肉,非要選個軟輔助 吐槽下這游戲策劃:游戲體驗感越來越差,公正也很差 對說了對面4個法師,就是不出魔抗,把把都是0-N開局,到底誰消極啊&#x…

stable Diffusion缺失模型補充地址

Hires. fix 8x_NMKD-Superscale https://huggingface.co/uwg/upscaler/resolve/main/ESRGAN/8x_NMKD-Superscale_150000_G.pth 放置位置: \models\ESRGAN

【工具使用】在vscode中用python繪圖

安裝拓展Jupyter Keymap 然后重啟vscode在代碼之前加上這個代碼,利用jupyter一行一行運行 # %%點擊Run Cell即可運行 # %% import matplotlib.pyplot as plt# 提供的數據 data [0.02856750446367257, 0.248564674096589, 0.1645266594124048, 0, 0.375108941955725…

智能臺燈系統之哪種調光方式更節能?

在節能方面,不同的調光方式有不同的表現。 PWM調光通過反復開關驅動器來控制LED燈的實際輸出功率,以達到照明調光的目的。這種方式能夠在最小電流和最大電流之間進行頻繁的切換,從而調節照明燈具的亮度。由于LED照明光源僅處于接通或關斷兩種…

通關!游戲設計之道Day18

過場動畫,或者說根本沒人看的東西 過場動畫是一系列的動畫或實時的動作序列,用來推進劇情制造大場面,烘托氣氛,展示對話和角色成長,以及顯現在某些情況下被玩家忽略的相關線索。 過場動畫是一把雙刃劍,一方…

二叉樹鏈式結構的前序_中序_后續_層序遍歷【詳細圖解】

P. S.:以下代碼均在VS2019環境下測試,不代表所有編譯器均可通過。 P. S.:測試代碼均未展示頭文件stdio.h的聲明,使用時請自行添加。 博主主頁:LiUEEEEE ??????????????????? ?? …

Excel 導入

依賴 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency> service 讀取excel文件的行數據 DataExcelListener<DeviceTemplateExcel> listener new…