创建/更新实体时,我应该将对象传递给业务逻辑还是对象值?
Posted
技术标签:
【中文标题】创建/更新实体时,我应该将对象传递给业务逻辑还是对象值?【英文标题】:When Creating/Updating an entity, Should I Pass object to business logic or object values? 【发布时间】:2011-09-09 19:43:05 【问题描述】:与实体合作时,推荐以下哪项? (以下代码在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);
在用户管理器中:
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, ...);
在用户管理器中:
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();
【问题讨论】:
【参考方案1】:选择第一个选项。稍后,当您发现必须在用户表单中添加 n+1 个字段时,您可以只更新用户类来处理新数据。将这些字段添加为参数几乎总是很痛苦,因为您应该更新对该方法的每次调用以包含这些字段,即使只有一个调用实际上需要新字段。
此外,根据经验,如果方法的参数数量超过五个,您应该考虑使用对象来传递这些参数。
【讨论】:
谢谢。你说得对。使用对象似乎更合理。另请查看***.com/q/2294995/337294 了解更多信息。【参考方案2】:您可以在 Repository(es) 的顶部添加一个 Service (Facade) 层,然后在该层实现复杂的方法和简单的方法,例如 CRUD。 有了这个新层,您在 UI 层中只使用了一个类
【讨论】:
【参考方案3】:我会选择第一个 - 传递一个对象。我觉得维护起来会更方便。
【讨论】:
以上是关于创建/更新实体时,我应该将对象传递给业务逻辑还是对象值?的主要内容,如果未能解决你的问题,请参考以下文章
在实例化时将对象传递给 Fragment 或 DialogFragment