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