2011-04-15 64 views
1

我在控制器中有很多代碼,我不知道該把它放在哪裏。首先我重新考慮它,以便它乾燥,但仍然在控制器中。重構MVC控制器代碼。控制器或型號

對代碼進行重新分解時,如何將某些東西移動到模型以及何時將某些東西保存在控制器中,遵循什麼是一個很好的指導原則?

回答

2

您的模型一般不應包含任何業務邏輯。如果確實如此,請將該模型提取到ViewModel,其中唯一的邏輯應該是您的顯示相關代碼。任何業務方法都應該存在於一個單獨的類中。有些人傾向於始終使用ViewModels而不是一般的整體模型(例如,CustomerEditViewModel而不僅僅是Customer model)。

控制器應該非常輕便,不應該有數據訪問代碼。我通常會調用存儲庫方法(​​)輕鬆加載數據,並將Facade Pattern作爲所有業務方法的網關。

例如,而不是數據加載代碼,一些計算,有的保存代碼,這可能全部被放入一個門面類,它的模型或customerId和做一些事情,如:

 
CustomerRepository repository = new CustomerRepository(); 
Customer customer = repository.GetCustomer(customerId); 
// call some business methods, assign data, etc. 
.. 
.. 
// now save 
repository.SaveCustomer(customer); 

你存儲庫類通常編碼到接口;這使得對這些類進行存根/模擬非常容易加載「假」數據,並且還可以將控制器和外觀從直接鏈接到類的具體實現,而不是鏈接到接口。

2

控制器應主要包含協調代碼。因此,如果您有代碼執行某項業務或域名功能,您可以移動。我傾向於使用應用程序服務或簡單的任務。就像IImageService或IDocumentService(雖然實現可能會變得相當臃腫)。我也喜歡使用諸如ILoginTask之類的單個任務。

然後注入實現(我使用Castle Windsor與自定義控制器工廠)。

Just my 2c --- HTH