0
我正在嘗試Spring Rest服務教程(https://spring.io/guides/gs/rest-service/),並做了自己的修改以反轉在REST服務調用中給出的給定名稱。我正在努力確定哪種書寫ReverseString方法更好的OOP設計。這裏是我的Name類和相應的ReverseString方法裏面的兩個變體。哪一個更好的面向對象方法的OOP設計
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());
}
}
對於這裏更加清楚是我的春節控制器類:
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));
}
}
/**
}
第二種方法在我看來更具可讀性,因爲使用了關鍵字「this」。 – akinfermo
對SO徵求意見總是有風險的,但我更喜歡選項2,因爲您調用了必須更改的實例的修改,而不是將其作爲參數傳遞。你有沒有想過創建一個靜態的'reverse'方法來接受一個String並將其返回。然後你已經創建了一個可以用來反轉任何字符串的方法,不僅是'Name's。該方法可以用作Name中的實現。 – Kwebble