2

我相信这更像是一个主观问题,但我很好奇人们的意见......

今天上班看到下面这个方法....

public T execute(T dto){...return dto;}

这对我来说似乎是多余的,在我看来这更好......

public void execute(T dto)

现在,在这种方法中,可以说以下调用....

dto.setProperty(something);

但是一位同事(以及一些 StackOverflow 帖子)认为这很糟糕,因为它并不表明该方法可能正在改变 T 对象。但是,这应该反映在堆栈中的对象上,所以我为什么需要返回。

这是一个正当的理由吗,在我看来,这必须导致开销增加(尽管平心而论,我们在这里使用 Java)

关于哪个更好的任何见解?

4

3 回答 3

5

这取决于什么T是,T 是否是不可变的,以及什么是不可变的execute。这个问题真的很笼统,而且细节很重要。

void addPerson(Club clubFullOfPeople, Person person);

T clone(T t);

既有效又让我觉得设计很好。

要回答您的确切问题-您是否应该返回信号可变性?这绝对让我感到震惊,因为如果有的话,它会表明 IM 可变性,不,绝对不是,但你需要更清晰的变量名称、文档等来传达这一点。

于 2012-10-19T14:37:45.693 回答
0

这不是一种不合理的风格,它只是一个应该做出的决定(逐个项目) - 与工作环境中使用的风格保持一致。下一个项目/工作可能会有不同的选择。

于 2012-10-19T14:36:12.377 回答
0

这两种风格都暗示 DTO 可以或不能更改。事实上,如果有的话,第一种形式宁愿建议参数化的​​ DTO没有被更改,但如果正在进行更改,它们将在返回的对象中进行。

返回 DTO 的优点:

  1. 可以链接调用(这可能是好是坏,取决于编码风格和实际方法/对象的使用)。例如,jQuery 的构建使得几乎每个调用都可以链接起来。
  2. 您可以返回空值或 DTO 的其他对象/形式,以表示某些类型的失败

在您的“首选”表示法中,表示失败的唯一方法是通过运行时异常。在不知道该execute方法应该完成什么的情况下,这可能没问题,或者可能表明一个更大的问题,即异常被用于处理流控制(一件坏事)。

净结果?我认为没有“更好”的解决方案 - 只是更符合您当前在现有代码库中所做的事情。

于 2012-10-19T15:04:15.970 回答