重審業(yè)務(wù)邏輯

用過(guò)MVC的童鞋都知道業(yè)務(wù)邏輯(Bussiness Logic),但是大多對(duì)這概念又是模棱兩可,業(yè)務(wù)邏輯從來(lái)都是這樣難以理解,談?wù)撉昂蠖朔蛛x之前這個(gè)概念非常有必要探討一下!

  在簡(jiǎn)單的CUID的系統(tǒng)中,基本上都是對(duì)數(shù)據(jù)進(jìn)行增刪改查操作,并沒(méi)有多少業(yè)務(wù)邏輯可言;但像銀行系統(tǒng)對(duì)金融數(shù)據(jù)的操作就顯得不那么簡(jiǎn)單了,以轉(zhuǎn)賬為例:A給B轉(zhuǎn)帳轉(zhuǎn)100元,簡(jiǎn)易代碼如下:

if(A.balance - 100 >= 0){
    A.balance -100;
    B.balance +100;
}else{    //返回異常信息}

  這串代碼已經(jīng)不僅僅是對(duì)數(shù)據(jù)的增刪改查了,它包含了一些業(yè)務(wù)規(guī)則,比如A的余額如果少于100,這個(gè)代碼會(huì)返回異常信息提示"余額不足",類似于這種,一組和特定領(lǐng)域業(yè)務(wù)相關(guān)而又不可拆分的代碼,可以看作業(yè)務(wù)邏輯的實(shí)現(xiàn)。所以轉(zhuǎn)賬是作為一部個(gè)不可拆分的整體提供給用戶的,也就是說(shuō)Business層是不可能給你提供一個(gè)"A.余額+x"這種接口的,如果你想轉(zhuǎn)賬,請(qǐng)用轉(zhuǎn)賬方法,方法里面怎么對(duì)數(shù)據(jù)操作,你無(wú)需關(guān)心,你也沒(méi)法關(guān)心。

=====
這里注意強(qiáng)調(diào)一下:頁(yè)面/渲染邏輯和業(yè)務(wù)邏輯的區(qū)別,頁(yè)面通常需要多個(gè)數(shù)據(jù)用來(lái)展示,比如網(wǎng)上銀行界面即顯示用戶名、余額和轉(zhuǎn)賬記錄等,這些信息的組合稱作頁(yè)面/渲染/展示邏輯,并不等于業(yè)務(wù)邏輯,業(yè)務(wù)邏輯只應(yīng)提供基本的業(yè)務(wù)數(shù)據(jù)而不應(yīng)該和頁(yè)面邏輯摻和起來(lái),就拿這個(gè)例子來(lái)講,頁(yè)面的這些數(shù)據(jù),service層會(huì)提供三個(gè)接口來(lái)支持頁(yè)面數(shù)據(jù)的產(chǎn)出,但并不會(huì)給你拼到一塊給你,拼接不同的業(yè)務(wù)信息組合成一個(gè)View Object只能是脫離于service之外的層處理,在此特地分清頁(yè)面邏輯和業(yè)務(wù)邏輯的關(guān)系

前后端定義

網(wǎng)友評(píng)論