第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

ASP.NET MVC-控制器中是否應(yīng)該存在業(yè)務(wù)邏輯?

ASP.NET MVC-控制器中是否應(yīng)該存在業(yè)務(wù)邏輯?

幾天前,Derik Whitaker發(fā)表了一篇文章,達(dá)到了我一直以來很好奇的一點(diǎn):控制器中是否應(yīng)該存在業(yè)務(wù)邏輯?到目前為止,我見過的所有ASP.NET MVC演示都將存儲(chǔ)庫訪問和業(yè)務(wù)邏輯放入了控制器中。有些人甚至還在那里進(jìn)行驗(yàn)證。這導(dǎo)致相當(dāng)大的,腫的控制器。這真的是使用MVC框架的方式嗎?看來這最終將導(dǎo)致許多重復(fù)的代碼和邏輯散布在不同的控制器上。
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

業(yè)務(wù)邏輯實(shí)際上應(yīng)該在模型中。您應(yīng)該針對胖模型,瘦控制器。


例如,與其具有:


public interface IOrderService{

    int CalculateTotal(Order order);

}

我寧愿擁有:


public class Order{

    int CalculateTotal(ITaxService service){...}        

}

這假設(shè)稅收是由外部服務(wù)計(jì)算的,并且需要您的模型知道與外部服務(wù)的接口。


這將使您的控制器看起來像:


public class OrdersController{

    public OrdersController(ITaxService taxService, IOrdersRepository ordersRepository){...}


    public void Show(int id){

        ViewData["OrderTotal"] = ordersRepository.LoadOrder(id).CalculateTotal(taxService);

    }

}

或類似的東西。


查看完整回答
反對 回復(fù) 2019-12-09
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以查看Stephen Walther撰寫的這篇很棒的教程,其中顯示了“使用服務(wù)層進(jìn)行驗(yàn)證”。

了解如何將驗(yàn)證邏輯從控制器操作中移出并移到單獨(dú)的服務(wù)層中。在本教程中,Stephen Walther解釋了如何通過將服務(wù)層與控制器層隔離來保持關(guān)注點(diǎn)的清晰分離。


查看完整回答
反對 回復(fù) 2019-12-09
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

控制器中不應(yīng)包含業(yè)務(wù)邏輯??刂破鲬?yīng)該盡可能的瘦,最好遵循模式:

  1. 查找域?qū)嶓w

  2. 對領(lǐng)域?qū)嶓w采取行動(dòng)

  3. 準(zhǔn)備數(shù)據(jù)以查看/返回結(jié)果

另外,控制器可以包含一些應(yīng)用程序邏輯。

那么我該把業(yè)務(wù)邏輯放在哪里?在模型中。

什么是型號?現(xiàn)在,這是一個(gè)好問題。請參閱Microsoft模式和實(shí)踐文章(對AlejandroR的出色發(fā)現(xiàn)表示贊賞)。這里有三類模型:

  • 視圖模型:這只是一個(gè)數(shù)據(jù)包,具有最少的(如果有的話)邏輯來往于視圖之間傳遞數(shù)據(jù),其中包含基本的字段驗(yàn)證。

  • 域模型:具有業(yè)務(wù)邏輯的胖模型,對單個(gè)或多個(gè)數(shù)據(jù)實(shí)體(即,給定狀態(tài)下的實(shí)體A而不是對實(shí)體B的操作)進(jìn)行操作

  • 數(shù)據(jù)模型:感知存儲(chǔ)的模型,單個(gè)實(shí)體中包含的邏輯僅與該實(shí)體相關(guān)(即,如果字段a則字段b)

當(dāng)然,MVC是一個(gè)范式,有多種形式。我在這里描述的只是MVC占據(jù)頂層,請參閱Wikipedia上的本文。

如今,MVC和類似的模型視圖演示者(MVP)是“關(guān)注分離”設(shè)計(jì)模式,這些設(shè)計(jì)模式僅適用于較大系統(tǒng)的表示層。在簡單的場景中,MVC可以代表系統(tǒng)的主要設(shè)計(jì),直接進(jìn)入數(shù)據(jù)庫。但是,在大多數(shù)情況下,MVC中的Controller和Model對Service或Data層/層具有寬松的依賴關(guān)系。這一切都與客戶端-服務(wù)器架構(gòu)有關(guān)


查看完整回答
反對 回復(fù) 2019-12-09
  • 3 回答
  • 0 關(guān)注
  • 1365 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號