在上一个问题中, Herbie 博士对已接受答案的评论之一是,我的方法正在执行两个职责……更改数据和保存数据。
我想弄清楚的是在我的情况下区分这些问题的最佳方法。
继续我的具有通过 NHibernate 检索的 Policy 对象的示例......
我目前将策略设置为非活动的方式如下:
Policy policy = new Policy();
policy.Status = Active;
policyManager.Inactivate(policy);
//method in PolicyManager which has data access and update responsibility
public void Inactivate(Policy policy)
{
policy.Status = Inactive;
Update(policy);
}
如果我将数据访问和数据更新的责任分开,那么最好的方法是什么?
让 PolicyManager(充当 dao 的网关)管理 Policy 对象的状态是否更好:
Policy policy = new Policy();
policy.Status = Active;
policyManager.Inactivate(policy);
policyManager.Update(policy);
//method in PolicyManager
public void Inactivate(Policy policy)
{
policy.Status = Inactive;
}
或者让 Policy 对象维护它自己的状态,然后使用管理器类将信息保存到数据库中:
Policy policy = new Policy();
policy.Status = Active;
policy.Inactivate();
policyManager.Update(policy);
//method in Policy
public void Inactivate()
{
this.Status = Inactive;
}