開始學習分層以後,理解上有些問題。問同學的看法,上網搜。現在,理解了一些,大家看看理解哪裏有問題,望指出!
層與層之間是如何聯繫的?
程序是按照U-B-D-B-U的順序執行的。分爲兩個階段:
1. 去時:U-B-D,是通過U層調用B層方法,B層調用D層方法,把三層聯繫起來的;
2. 返回時:D-B-U,是通過一次返回Entity,把三層聯繫起來的。
通過下圖,可以看出他們的共同點,即每層都需要Entity實體。這是他們的共同點,也是通過這個類進行聯繫的。看代碼也可以知道是通過Entity聯繫的,那麼是怎麼聯繫的?
分層離不開Entity!
下圖,是在網上搜到的,我感覺非常正確,借用一下!這幅圖詳細的描述了程序執行的流程。
一、U層採集信息,並調用B層方法進行判斷;從U—B層;
把文本框的內容複製給變量;
實例化一個B層對象,執行該對象,該對象的參數爲上述變量,故執行方法時,發生了傳參。
二、執行B層方法一開始,B層就調用D層,需要D層對數據庫進行查詢操作;從B—D層;
B層實例化D層對象,並執行該對象的方法;
D層對數據庫進行一系列操作;
實例化Entity,並把數據庫中的信息複製給Entity的屬性。(之前僅僅是定義了實體對象,並沒有實例化)
三、實體Entity得到值後,返回B層接着進行的判斷,然後把判斷結果返回U層;從D—B—U層。
小結:從U-B-D層,這個過程,可以Entity沒有起到作用,到D層以後,對數據庫操作完成以後,Entity纔開始有值。但之前的聲明,也很有用,是爲了可以返回正確,執行D-B-U。下面進行說明。
爲什麼User名稱不同,也能正確返回?
大家肯定也注意到了,U層聲明Entity實體對象User,B層聲明Entity實體對象User,D層也聲明Entity實體對象User,那麼這三個是一個嗎?我的第一感覺是肯定不同。因爲在不同的層,而且每次都聲明,那麼爲什麼把他們設置成一樣的名字呢?若理解爲一樣,明明每次都重新聲明,這樣理解好像又說不通。
我嘗試把名字改爲User,User1,User2,結果不受影響,仍然可以正確返回!那麼可以肯定這三個不是同一個對象。但是,就更加奇怪了:代碼中B層寫着return user1;執行程序時,卻扔能正確返回到U層User!
嘗試着不寫返回值:vs給的提示是:需要一個類型可轉換爲“Login.Model.UserInfo”的對象。
看到這,我的理解是:return user;的意思是返回user的類Entity,而不是返回user本身。
到底是怎麼傳參的?
我們一直聽說是通過方法傳參的!但是,我還是不明白方法爲什麼可以傳參?(之前,學習vb時,就不明白!)聽胡森森一解釋,頓時,豁然開悟!
執行方法時,進行了傳參!如:U層調用B層的Login方法:在調用方法時,自然而然的就把參數傳到了B層。
同樣,B層調用D層的方法時,也就把參數傳到了D層。
現在,想想傳參的問題很簡單明瞭,但當時怎麼就想不通呢?
總結:總算是對分層明白了一些,但是,這個間隔的時間有點長。剛開始,敲三層時,知道執行完這一步,該執行下一步,就感到滿足。但是,敲機房登錄時,就遇到問題了,之前三層是C#語言,現在是VB,雖然,很像,但是,若停留在模仿階段的話,很容易出錯。我就出現了很嚴重的錯誤,導致三層直接脫節,相互沒有關係。