Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于类中的方法,哪一种OOP设计更好_Java_Spring_Rest_Oop - Fatal编程技术网

Java 对于类中的方法,哪一种OOP设计更好

Java 对于类中的方法,哪一种OOP设计更好,java,spring,rest,oop,Java,Spring,Rest,Oop,我正在试用SpringREST服务教程(),并进行了自己的修改,以反转Rest服务调用中给定的名称。我正在努力确定哪种编写反向限制方法更适合OOP设计。下面是my Name类的两个变体以及其中相应的ReverseString方法 public class Name { private String name; public Name(String name){ this.name = name; } public String getName(){ return na

我正在试用SpringREST服务教程(),并进行了自己的修改,以反转Rest服务调用中给定的名称。我正在努力确定哪种编写反向限制方法更适合OOP设计。下面是my 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;

}

}
--------或-------------

为了更加清晰,这里是我的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));

}


}
/**



}

它们在功能上是不同的。一个修改对象的内部状态,另一个不修改。
第一个选项不是OOP,而是功能性的。第二种方法修改对象的内部状态,更适合OOP


哪个更好取决于你的要求。OOP只是处理一类问题的一种方法,功能上可能还不错。

它们在功能上是不同的。一个修改对象的内部状态,另一个不修改。
第一个选项不是OOP,而是功能性的。第二种方法修改对象的内部状态,更适合OOP


哪个更好取决于你的要求。OOP只是处理一类问题的一种方法,而函数式的可能还不错。

我认为第二种方法更具可读性,因为它使用了关键字“this”。因此征求意见总是有风险的,但我更喜欢选项2,因为您对必须更改的实例调用修改,而不是将其作为参数传递。您是否考虑过创建一个静态
reverse
方法,该方法接受字符串并将其反向返回。然后,您已经创建了一个方法,可以用于反转任何字符串,而不仅仅是
Name
s。该方法可以用作名义上的实现。我认为第二种方法更具可读性,因为使用了关键字“this”。征求意见总是有风险的,但我更喜欢选项2,因为您对必须更改的实例调用修改,而不是将其作为参数传递。您是否考虑过创建一个静态
reverse
方法,该方法接受字符串并将其反向返回。然后,您已经创建了一个方法,可以用于反转任何字符串,而不仅仅是
Name
s。该方法可以作为名义上的实现。
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));

}


}
/**



}