gpt4 book ai didi

c# - 分离此代码关注点的最佳方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:19:28 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com