2010-06-28 62 views
5

看過Rob Conery的Kona應用程序樣本後,我發現他在IoC-ISession中使用了兩件事情,他擁有數據層代碼和服務,他在數據存儲區中操作數據時需要執行一些額外的業務邏輯。例如,我們可能不只是向數據庫添加一條記錄,而且還要更改另一條記錄的屬性,增加一些數量,收回某些數據等等。我們需要將其他代碼放在一些地方,然後將其放入這些服務中。哪裏可以在ASP.NET MVC應用程序中放置數據操作和業務邏輯代碼?

例如,他有一個CustomerService操縱客戶。這要求我們將ISession實例發送到CustomerService,以便CustomerService可以使用它來訪問數據存儲。

現在,另一種方法是將其他代碼放在Customer類本身中,並將ISession(或IRepository,無論使用哪種術語)發送到該類。並沒有任何服務。通常,客戶,訂單,產品等類是Model類,因此會導致大/重型模型類。

我的問題是,哪種解決方案更好?到目前爲止,我沒有這方面的需要,因爲我擁有控制器中的大部分代碼,但現在隨着應用程序的增長,我需要對此做出決定並清理控制器。

目前我有: - 與業務邏輯脂肪控制器在裏面, - 非常原子庫, - 很乾淨的模型和的ViewModels。

我應該移動到: - 超薄控制器, - 庫有更多的代碼, - 與業務邏輯代碼模型(特別是應我的模型類包含類似的Add(),刪除()方法,例如Customer.Remove ()??)

或 - 超薄控制器, - 原子庫, - 還算乾淨模型, - 服務(封裝一切不進入任何以前的)。

回答

7

我建議您將模型類和服務層依賴於這些存儲庫來定義業務操作的存儲庫包含原子操作。 AOP的概念可用於在每個業務操作開始時自動啓動SQL事務,並在異常結束時提交或回滾。

最後控制器將使用這些服務類並在域模型和視圖模型之間進行轉換。

+2

同上,除了我轉換爲服務內部的視圖模型,因此控制器無法調用我的域模型上的方法。 – Ryan 2010-06-28 14:46:00

+0

這是一個很好的做法,雖然我的模型沒有方法只是字段/屬性。 – mare 2010-07-08 19:55:42

+0

這就是爲什麼你應該有存儲庫。 – 2010-07-08 20:35:12

相關問題