對於Microsoft MVC,我有以下問題 - 或者更確切地說,迫切需要有價值的建議。來自客戶端的某個動作導致創建的:Microsoft MVC中服務層和存儲庫的設計
- 在表中的一句話備註
- 在表中HourRegistrations
- 門票
在更改日誌中的條目的條目我使用業務操作的服務層和CRUD操作的存儲庫。問題是我有時需要連接來自不同DataContext的對象,所以我想我使用了一個有缺陷的設計。最近我們已經開始從控制器和存儲庫中刪除所有業務邏輯,這是我遇到的第一件事情之一。
實施例:
BLogic.AddRemarks(Ticket t, ...)
{
Remark r = _remarksRepository.Create();
r.Ticket = t;
_remarksRepository.Add(r);
_remarksRepository.Save();
}
這觸發kBOOM因爲票證是在使用所述存儲庫中的控制器獲取。所以備註r和票據t不共享相同的數據上下文。
我可以改變方法的簽名,並提供一個int TicketId,但這並不正確。此外,我接下來會遇到類似的問題。
我的存儲庫是在服務類的構造函數中創建的。也許我必須在方法開始時創建它們?即使那樣,我也必須經常調用Ids而不是真正的對象。
術語DI和IoC不可互換,意味着兩件事情不同。通過使用DI來實現IoC。 Windsor,Unity,Ninject是您用來反轉控制的DI框架。 ;) – jfar 2011-05-20 14:23:43
因此,在控制器動作開始時,我應該初始化一個上下文管理器並從中取出必要的對象?我可以從服務層訪問上下文管理器,而不必在那裏明確提供它嗎?或者這是一個服務層的解決方案,因爲我可以使用所需的數據上下文創建存儲庫。 – Paul77 2011-05-20 14:30:45
@Paul使用控制器的構造函數來包含ContextManager依賴項。對服務層類也一樣。不要在你的方法中實例化ContextManager。 – mxmissile 2011-05-20 14:41:25