对于类中的方法,哪个是更好的OOP设计

时间:2016-09-28 18:46:26

标签: java spring rest oop

我正在尝试Spring Rest服务教程(https://spring.io/guides/gs/rest-service/)并进行自己的修改以反转REST服务调用中给出的给定名称。我正在努力确定哪种方式编写ReverseString方法是更好的OOP设计。以下是我的Name类的两个变体以及里面相应的ReverseString方法。

public class Name {
private String name;


public Name(String name){
    this.name = name;

}


public String getName(){

    return name;
}

public void setName(String name){
    this.name = name;
}

// Is this good OOP design?
public static Name ReverseName(Name myName){
        myName.setName(new StringBuilder(myName.getName()).reverse().toString());

return myName;

}

}

-------- ------------- OR

public class Name {
  private String name;


  public Name(String name){
    this.name = name;

}


public String getName(){

    return name;
}

public void setName(String name){
    this.name = name;
}


public void  ReverseName(){
        this.setName(new StringBuilder(this.getName()).reverse().toString());



}

 }

为了更加清晰,这里是我的Spring控制器类:

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Controller {

private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();

@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value ="name", defaultValue="World") String name) {
    return new Greeting(counter.incrementAndGet(),
            String.format(template, name));

}

@RequestMapping("/name")
public Name name(@RequestParam(value="reverse") String name){
    Name myName = new Name(name);
    myName.ReverseName();
    return myName;

}
 /**
 // Other Option
 @RequestMapping("/name")
public Name name(@RequestParam(value="reverse") String name){
    return Name.ReverseName(new Name(name));

}


}
/**



}

1 个答案:

答案 0 :(得分:2)

它们在功能上有所不同。一个修改对象的内部状态,另一个不修改。
第一个选项不是OOP,而是功能性的。第二个修改了对象的内部状态,并且更多是OOP。

哪一个更好是取决于您的要求。 OOP只是处理一类问题的一种方法,功能可能就好了。