老生常談 表現邏輯與業務邏輯的分離

2021-08-29 09:20:17 字數 964 閱讀 2841

表現邏輯和業務邏輯的分離是老話題了,近日恰好遇到此相關問題,便把自己心得拿來塗鴉.

表現邏輯和業務邏輯的具體定義不再敘述,我各舉乙個例子,畢竟具體的例子更容易讓人明白.比如,web頁面上要顯示新聞的列表,要求奇數行顯示為紅色,偶數行顯示為白色,這樣的就是表現邏輯;再看這樣的需求:web頁面上列出使用者的頭像和使用者名稱,頭像和使用者名稱都有超連線,連線到使用者的個人主頁,連線位址是或者也就是如果使用者有使用者名稱,則用使用者名為位址,否則就用其id為位址.這樣的邏輯可以算業務邏輯.其實有時候業務邏輯和表現邏輯是很難明確區分的,更多的時候需要經驗.

認清了業務邏輯和表現邏輯,我們就要使她們分離.要做到分離,就要在檢視層只寫表現邏輯,而把業務邏輯放到業務層**裡去實現.對於上面例子中的需求2有兩種方法來實現,一種是不分離的,一種是分離的,如下(我就用veloctiy的語法寫吧):

假設resultlist裡是使用者物件tuser,裡面有name 和id等屬性.

第一種(沒分離的):

[code]

#foreach($result in $resultlist)

#if($result.name != '')

$!result.name

#else

$!result.id

#end

#end

[/code]

第二種(分離的):

先在tuser中寫個方法,叫getlink(),**如下:

[code]

public string getlink()

else

}[/code]

再看web頁面的實現:

[code]

#foreach($result in $resultlist)

$!result.name

#end

[/code]

顯然第2種方法簡化了頁面的邏輯,到這裡,這篇文章該畫句號了,希望對初學者有所幫助,這種膚淺的文章我還是發到入門討論裡好了.

老生常談 與equals的區別

最近在研究string,看到面試題有一題是 與equals的區別的題目。關於 與equals的區別相信大家很熟悉了,包括我也看到也是腦中一閃而過,比較的是位址,equals比較的是內容。真是這樣嗎?或者說能具體或深入的解釋下嗎?如果被面試官這樣問,會如何作答呢?由於最近看了string和object...

CSS布局 Float布局過程與老生常談的三欄布局

使用css布局網頁,那是前端的基本功了,什麼兩欄布局,三欄布局,那也是前端面試的基本題了。一般來說,可以使用cssposition屬性進行布局,或者使用cssfloat屬性布局。前者適合布局首頁,因為首頁上的內容往往可以完全控制。後者適合布局模板,模板中填充的內容你沒法控制 比如,在編輯wordpr...

C 老生常談的 值型別與引用型別

說起值型別和引用型別,大家都知道這麼個事,很多時候我們會拿string做值型別來做比較,但實際上string雖然是值型別,卻表現的有點特別 看下面的乙個例子 話說string是引用型別,所以str1和str2都指向同一塊記憶體位址,當修改了str1的值,按理str2取值時也會受到影響!但實際上我們會...