创建/更新实体时,是否应该将对象传递给业务逻辑或对象值?

时间:2011-06-07 06:30:54

标签: architecture business-logic separation-of-concerns business-logic-layer multi-layer

使用实体时,建议使用以下哪项? (以下代码位于UI层。UserManager位于业务层中)

1-

protected void btnReturn_Click(object sender, EventArgs e)
{
    var user = new User();
    user.Name = txtName.Text;
    user.Address = txtAddress.Text;
    ...
    new UserManager().AddUser(User);
}  

在UserManager中:

public void AddUser(User user)  
{
    _repository.Add(user);
    _repository.SaveChanges();
}  

public void DeleteUser(User user)  
{
    _repository.Delete(user);
    _repository.SaveChanges();
}  

2-

protected void btnReturn_Click(object sender, EventArgs e)
{
    new UserManager().AddUser(txtName.Text, txtAddress.Text, ...);
}  

在UserManager中:

public void AddUser(string name, string address,...)  
{
    var user = new User();
    user.Name = name;
    user.Address = address;
    context.Users.Add(user);
    context.SaveChanges();
}  

public void DeleteUser(int userID)  
{
    var user = rep.First(u => u.UserID = userID)
    _repository.Delete(user);
    _repository.SaveChanges();
}  

3 个答案:

答案 0 :(得分:1)

选择第一个选项。稍后,当您发现必须向用户表单添加n + 1个字段时,您只需更新用户类即可处理新数据。将这些字段添加为参数几乎总是很痛苦,因为您应该更新对该方法的每个调用以包含这些字段,即使只有一个调用实际上需要新字段。

另外,根据经验,如果方法参数的数量超过5,则应考虑使用对象传递这些参数。

答案 1 :(得分:1)

您可以在Repository(es)的顶部添加Service(Facade)图层,然后在此图层中实现复杂的方法和简单的方法(如CRUD)。 使用这个新图层,您只在UI图层中使用了一个类

答案 2 :(得分:0)

我会选择第一个 - 传递一个物体。我觉得维护会更容易。