gpt4 book ai didi

oop - MyObject.DoSomething() 与 MyService.DoSomething(MyObject)

转载 作者:行者123 更新时间:2023-12-01 02:33:33 31 4
gpt4 key购买 nike

这个比那个好吗?

这甚至是一个有效的问题吗?

我最近被告知 MyObject.DoSomething()已经过时了,服务方式是首选。那正确吗?

例子:

public class Policy : ICancellable
{
public void Cancel()
{
// Code to cancel working with 'this'.
}
}

对比
public class PolicyCancellationService
{
public void Cancel(Policy policy)
{
// Code to cancel working with 'policy'.
}
}

如果使用服务方式 - 对象可以负责任何功能还是应该只是愚蠢的?

最佳答案

I've been advised recently that the MyObject.DoSomething() is quite dated and the service way of doing it is preferred. Is that right?



两种方式都有效;你应该选择导致高内聚和低耦合的那个。

根据经验,您应该首先尝试将其放入类本身,即 MyObject.DoSomething() .

在以下情况下,您应该只使用单独的(服务)类:
  • DoSomething 的功能与MyObject的责任没有直接关系.如果你把一个不相关的方法放入 MyObject ,导致低内聚。
  • MyObject没有执行 DoSomething 所需的所有信息.如果您将此附加信息提供给 MyObject ,导致高耦合。

  • 在您的示例中,如果取消是策略的一个重要功能,并且策略具有执行此操作所需的所有信息,您应该将其保存在 Policy 中。类(class)。

    If the service way of doing it is used - can the object be responsible for any functionality or should it just be dumb?



    恰恰相反:您应该在域对象本身中保留尽可能多的功能。服务应该仅限于协调多个领域对象之间的事件;它们最好不包含任何业务逻辑。

    关于oop - MyObject.DoSomething() 与 MyService.DoSomething(MyObject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638335/

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