【问题标题】:Save a domain model with related list data保存具有相关列表数据的域模型
【发布时间】:2012-12-04 19:51:08
【问题描述】:

我有这个实体:

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

假设在我的操作中,我从我的视图中获得了一个任务和一个带有用户 ID 的列表,那么用相关数据保存此对象的正确方法是什么:

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();
}

【问题讨论】:

    标签: asp.net-mvc domain-driven-design


    【解决方案1】:

    了解存储库中发生的情况可能会有所帮助,但通常情况下,存储库不应在实体上调用任何类型的行为。它应该只负责持久性和重构。典型的工作流程如下:

    1. 实体按 ID 加载。
    2. 在传递了所需参数的实体上调用行为。
    3. 已提交更改 - 通过在存储库中显式保存或提交环境事务和工作单元。

    此代码可以直接在 MVC 控制器中,也可以在控制器引用的应用程序服务中。

    【讨论】:

    • 那么,您是说在操作中加载用户还是使用服务层?
    • 你可以走任何一条路线。如果您将此逻辑封装到控制器引用的应用程序服务中,则可能更容易推断出您的领域层的 API。另一方面,将逻辑直接放在控制器中并绕过额外的服务层并没有错——控制器可以是服务层。
    【解决方案2】:

    问题不清楚,但我会做以下事情。如果您比较这两位代码,第一位将对其他人更具可读性,并且它封装了用户不需要知道的所有设置工作。

    但是,我不会将其命名为“保存”,它不够具体。

    _repository.Save(task, users) 
    

    【讨论】:

    • 方法名只是一个例子:)
    • 是的,但解释我的问题是没有必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多