0

我正在修改代码,我已经看到了很多方法,在这些方法中我们修改了一个输入参数,然后什么也不返回。我想知道这是否是设计这些方法的正确方法。例如:

void addRespones (List<DTO> dtos, Set<String> codes){
     for (DTO dto: dtos){
          if (responses.contains(dto.getCode()){
               dto.setResponseOk(true);
          } else {
               dto.setResponseOK(false);
          }
     }
}

然后在调用 addCodes 的方法中,我们根据响应的值进行一些处理。

这种用法完全没问题还是有更好的常见做法?在我看来,我们往往过于频繁地将输入参数用作“输出”参数。我认为作为OO,我们应该使用类DTO的一些方法,例如

for (DTO dto: dtos){
     dto.setResponseOk(codes);
}

然后在 DTO 类中:

boolean setResponseOk(Set<String> codes){
     if(codes.contains(this.getCode()){
          return true;
     }
     return false;
}
4

2 回答 2

1

我认为作为OO,我们应该使用类DTO的一些方法

这取决于你的代码库和你想要做什么。

我是Clean Code的忠实拥护者,因此 addResponse 方法会在代码审查中被砍掉。如果有人“确定”我们有一个有限的响应代码列表,并且没有其他条件、变量或逻辑将参与检查响应码的有效性。

我会像这样重新分解课程。

void updateResponseCode(List<Dto> dtos,Set<String> responseCodes){
    for (DTO dto: dtos){
        dto.setResponseCodes(codes);
    }

}

然后在 DTO 类中:

// it always preferable to have a single point of exit for a method
boolean isResponseOk(){
    boolean responseOk=false;
    if(codes.contains(code){
        responseOk=true;
    }
    return responseOk;
}

否则,人们将选择一种方法:

   void resolveResponseCode(List<Dto> dtos,Set<String> responseCode){
   for (DTO dto: dtos){
       if (responses.contains(dto.getCode()){
           dto.setResponseOk(true);
        } else {
           dto.setResponseOK(false);
        }
    }

}

请注意,唯一改变的是方法名称。

于 2013-07-22T12:46:32.323 回答
0

在给定的示例中,您正在传递集合,并且所做的任何修改都将反映为通过引用传递。

可能的修改可以在修改后返回相同的集合对象——这提高了可读性。但是在这种方法中,只能返回一个对象,如果您正在修改内部的两个输入对象,那么这种方法会被折腾,并且将被迫使用包装类来返回。

在具体示例 addRespones() 中,可以将 for 循环从方法中拉出,并且可以从循环中调用 addRespones。这样,您可以确保内部传递的集合不会被更改。

于 2013-07-22T12:02:18.140 回答