2012-12-04 38 views
0

我有這樣的實體:保存與相關列表數據的域模型

public class Task 
{ 
    public int Id {get;set;} 
    public string Title {get;set;} 
    public List<User> Users{get;set;} 
} 

什麼是正確的方式保存在我的行動相關的數據假設我得到一個任務,並與users'id一個List這個對象從我的角度來看:

public ActionResult Save(Task task, List<int> users) 
{ 
    _repository.Save(task, users) //should I do it? 
} 

//or it? 
public ActionResult Save(Task task, List<int> users) 
{ 
    task.Users = _userRepository.GetAllUsers(users); 
    _repository.Save(); 
} 

回答

2

知道存儲庫中會發生什麼可能會有幫助,但一般來說,存儲庫不應調用實體上的任何行爲。它只應該對持久性和重組負責。一個典型的工作流程如下:

  1. 一個實體通過ID加載。
  2. 在傳遞了必需參數的實體上調用行爲。
  3. 更改已提交 - 可以通過顯式保存資源庫或提交環境事務和工作單元。

此代碼既可以直接位於MVC控制器中,也可以直接位於控制器引用的應用程序服務中。

+0

那麼,您是說要在用戶內部加載用戶或使用服務層? – MuriloKunze

+0

你可以去任一條路線。如果將此邏輯封裝到由控制器引用的應用程序服務中,則可能更容易推理域層的API。另一方面,將該邏輯直接放在控制器中並繞過額外的服務層沒有任何問題 - 控制器可能是服務層。 – eulerfx

1

問題不清楚,但我會做以下。如果您比較兩位代碼,則第一位對其他位可讀性更高,它封裝了用戶不需要知道的所有設置工作。

但是,我不會將其命名爲「保存」,它不夠具體。

_repository.Save(task, users) 
+0

方法名稱只是一個例子:) – MuriloKunze

+0

我明白了。但是有沒有考慮使用工作單元模式? – Jack

+0

是的,但解釋我的問題是沒有必要的。 – MuriloKunze