到底是怎麼傳參的?

2021-07-02 00:37:06 字數 1832 閱讀 3747

開始學習分層以後,理解上有些問題。問同學的看法,上網搜。現在,理解了一些,大家看看理解**有問題,望指出!

層與層之間是如何聯絡的?

程式是按照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,雖然,很像,但是,若停留在模仿階段的話,很容易出錯。我就出現了很嚴重的錯誤,導致三層直接脫節,相互沒有關係。

STL map的operator 到底是怎麼回事

來看一道題 請統計陣列strs裡各個字元出現的次數。使用map string strs 那麼最直觀,最容易想到的方法,就是用first來存字元,second來存次數。map countmap first為string型別存字元,second為size t型別存次數 for size t i 0 i ...

AlphaGo到底是怎麼下棋的?

在一局圍棋中,平均每一步的下法大約有200種可能。棋盤上可能出現的局面總數到了遠大於宇宙中原子總數的地步。因此,通過暴力窮舉手段 所有的可能情況並從中篩選中最優勢走法的思路,並不適用於圍棋ai。alphago選擇了別的下棋方式。支撐alphago提高棋力 打敗人類選手的 秘訣 有三個 深度神經網路 ...

IPFS 到底是怎麼工作的?

這就是本文要 的主題!先來看一下 add 和 get 的基本操作過程 當乙個 ipfs 節點執行 add 操作時,它會把檔案進行分塊 block,通過構建乙個 merkle 樹根節點,來把每個子塊節點都連線起來,每個 block 都會用乙個唯一的 cid 進行標識。block 資料會被儲存到本地的 ...