在 previous question 中来自 Dr. 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;
}
最佳答案
我会做什么:
创建一个用于保存和检索策略的存储库。 (策略存储库)
如果您有必须执行以激活/停用策略的复杂逻辑,您可以为此创建一个服务。如果该服务需要访问数据库,则可以在必要时将 PolicyRepository 传递给它。 如果不涉及复杂的逻辑,并且激活/停用策略只是将标志设置为 false 或 true 的问题,或者如果仅涉及策略类的成员,那么为什么“已激活”不是策略的简单属性您可以设置为 false/true 的类? 如果涉及其他对象,或者如果需要数据库访问来激活或停用策略,我只会创建服务。
关于c# - 分离此代码关注点的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1425681/