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);
}
}
或類似的東西。

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)的清晰分離。

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
控制器中不應(yīng)包含業(yè)務(wù)邏輯??刂破鲬?yīng)該盡可能的瘦,最好遵循模式:
查找域?qū)嶓w
對領(lǐng)域?qū)嶓w采取行動(dòng)
準(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)
- 3 回答
- 0 關(guān)注
- 1365 瀏覽
添加回答
舉報(bào)