對「三層結構」的深入理解 從一家小餐館說起

2021-09-08 21:00:53 字數 2929 閱讀 7209

乙個「三層結構」的

web應用程式,就好象是一家小餐館。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> n

表 現 層

,所有的

.aspx

頁面就好像是這家餐館的菜譜。 n

中間業務層

,就像是餐館的服務生。 n

資料訪問層

,就像是餐館的大廚師傅。 n

而我們這些**瀏覽者,就是去餐館吃飯的吃客了……

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

我們去一家餐館吃飯,首先得看他們的菜譜,然後喚來服務生,告訴他我們想要吃的菜餚。服務生記下來以後,便會馬上去通知大廚師傅要烹製這些菜。大廚師傅收到通知後,馬上**燒菜。過了不久,服務生便把一道一道香噴噴的、熱氣騰騰的美味端到我們的桌位上——

而我們訪問乙個基於

asp.net

技術的**的時候,首先開啟的是乙個

aspx

頁面。這個

aspx

頁面的後台程式會去呼叫中間業務層的相應函式來獲取結果。中間業務層又會去呼叫資料訪問層的相應函式來獲取結果。在乙個使用者訪問

tracelword3

開啟listlword.aspx

listlword.aspx.cs

會去呼叫位於中間業務層

lwordservice

的listlword(dataset ds)

函式。然後這個函式又會去呼叫位於資料訪問層

accesstask

的listlword(dataset ds)

函式。最後把結果顯示出來……

對比一下示意圖:

從示意圖看,這兩個過程是否非常相似呢?

不同的地方只是在於,去餐館吃飯,需要吃客自己喚來服務生。而訪問乙個

asp.net

**,選單可以代替吃客喚來服務生。在最後的返回結果上,把結果返回給

aspx

頁面,也就是等於把結果返回給瀏覽者了。

高度的「物件導向思想」的體現——封裝

在我們去餐館吃飯的這個過程中,像我這樣在餐館中的吃客,最關心的是什麼呢?當然是:餐館的飯菜是不是好吃,是不是很衛生?**是不是公道?……而餐館中的服務生會關心什麼呢?應該是:要隨時注意響應每位顧客的吩咐,要記住顧客在哪個桌位上?還要把顧客點的菜記在本子上……餐館的大廚師傅會關心什麼呢?應該是:一道菜餚的做法是什麼?怎麼提高燒菜的效率?研究新菜式……大廚師傅,燒好菜餚之後,只管把菜交給服務生就完事了。至於服務生把菜送到哪個桌位上去了?是哪個顧客吃了他做的菜,大廚師傅才不管咧——服務生只要記得把我點的菜餚端來,就成了。至於這菜是怎麼烹飪的?顧客幹麻要點這道菜?他才不管咧——而我,只要知道這菜味道不錯,**公道,乾淨衛生,其他的我才不管咧——

這裡面不正是高度的體現了「物件導向思想」的「封裝」原則嗎?

無論大廚師傅在什麼時候研究出新的菜式,都不會耽誤我現在吃飯。就算服務生忘記我的桌位號是多少了,也不可能因此讓大廚師傅忘記菜餚的做法?在我去餐館吃飯的這個過程中,我、餐館服務生、大廚師傅,是封裝程度極高的三個個體。當其中的乙個個體內部發生變化的時候,並不會波及到其他個體。這便是物件導向封裝特性的乙個益處!

土豆燉牛肉蓋飯與實體規範

在我工作過的第一家公司樓下,有一家成都風味的小餐館,每天中午我都和幾個同事一起去那家小餐館吃飯。公司附近只有這麼一家餐館,不過那裡的飯菜還算不錯。我最喜歡那裡的「土豆燉牛肉蓋飯」,也很喜歡那裡的「雞蛋湯」,那種美味至今難忘……所謂「蓋飯」,又稱是「蓋澆飯」,就是把烹飪好的菜餚直接遮蓋在鋪在盤子裡的公尺飯上。例如「土豆燉牛肉蓋飯」,就是把一鍋熱氣騰騰的「土豆燉牛肉」遮蓋在公尺飯上——

當我和同事再次來到這家餐館吃飯,讓我們想象以下這樣的情形:

情形一:

我對服務生道:給我乙份好吃的!

服務生道:什麼好吃的?

我答道:乙份好吃的——

三番幾次……

我對服務生大怒道:好吃的,好吃的,你難道不明白嗎?!——

這樣的情況是沒有可能發生的!因為我沒有明確地說出來我到底要吃什麼?所以服務生也沒辦法為我服務……

問題後果:我可能被送往附近醫院的精神科……

情形二:

我對服務生道:給我乙份土豆燉牛肉蓋飯!

服務生對大廚師傅道:做乙份宮爆雞丁——

這樣的情況是沒有可能發生的!因為我非常明確地說出來我要吃土豆燉牛肉蓋飯!但是服務生卻給我端上了一盤宮爆雞丁?!

問題後果:我會投訴這個服務生的……

情形三:

我對服務生道:給我乙份土豆燉牛肉蓋飯!

服務生對大廚師傅道:做乙份土豆燉牛肉蓋飯——

大廚師傅道:宮爆雞丁做好了……

這樣的情況是沒有可能發生的!因為我非常明確地說出來我要吃土豆燉牛肉蓋飯!服務生也很明確地要求大廚師傅做乙份土豆燉牛肉蓋飯。但是廚師卻烹製了一盤宮爆雞丁?!

問題後果:我會投訴這家餐館的……

情形四:

我對服務生道:給乙份土豆燉牛肉蓋飯!

服務生對大廚師傅道:做乙份土豆燉牛肉蓋飯——

大廚師傅道:土豆燉牛肉蓋飯做好了……

服務生把蓋飯端上來,放到我所在的桌位。我看著香噴噴的土豆燉牛肉蓋飯,舉勺下口正要吃的時候,卻突然發現這盤土豆燉牛肉蓋飯變成了石頭?!

這樣的情況更是沒有可能發生的!必定,現實生活不是《西遊記》。必定,這篇文章是學術文章而不是《哈里波特》……

問題後果:……

三層開發我的一家之言

近期不斷的三層實踐我對dcom soap等等都產生了 敬而遠之 的想法。dcom和windows許可權的整合使得部署起來仍然不是很完美 borland的midas的實現俺琢磨起來還比較困難,它要在客戶端註冊的 server要在客戶端執行一次以註冊介面什麼的東西讓人不爽 都在域中的電腦,居然也有部分無...

對全連線層的深入理解

理解全連線層 連線層實際就是卷積核大小為上層特徵大小的卷積運算,卷積後的結果為乙個節點,就對應全連線層的乙個點。理解 假設最後乙個卷積層的輸出為7 7 512,連線此卷積層的全連線層為1 1 4096。如果將這個全連線層轉化為卷積層 1.共有4096組濾波器 2.每組濾波器含有512個卷積核 3.每...

我對三層架構的理解

三層介紹及其的職責 層之間的關係以及規則 三層架構的優缺點總結 概念 資料訪問層 dal 主要負責對資料庫的直接訪問,向上層遮蔽資料庫差異。關係 規則優點 降低維護成本,方便管理。對於不斷變化的系統有著先天的優勢。遮蔽資料庫差異。適合大型專案及合作開發。安全性。缺點執行速度。量大。層次的劃分並不是死...