2016-09-28 9 views
0

私はSpring Rest Serviceチュートリアル(https://spring.io/guides/gs/rest-service/)を試しており、RESTサービス呼び出しで指定された名前を逆にするために自分で修正しました。私は、ReverseStringメソッドを書く方法がより良いOOPデザインであることを特定するのに苦労しています。私のNameクラスとそれに対応するReverseStringメソッドの2つのバリエーションがあります。追加明確にするためにクラス内のメソッドのためのより良い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)); 

} 


} 
/** 



} 
+0

キーワード「this」を使用しているため、2番目のアプローチは私の意見では読みやすいです。 – akinfermo

+0

SOの意見を求めるのはいつも危険ですが、変更する必要のあるインスタンスの変更を呼び出し、パラメータとして渡さないため、オプション2がより好きです。 Stringを受け取り、それを元に戻す静的な 'reverse'メソッドの作成について考えましたか?次に、 'Name'だけでなく、文字列を逆にするためのメソッドを作成しました。このメソッドは、Nameの実装として使用できます。 – Kwebble

答えて

2

これらは機能的に異なります。 1つはオブジェクトの内部状態を変更し、もう1つは変更しません。
最初のオプションはOOPではなく機能的です。第2はオブジェクトの内部状態を変更し、より多くのOOPです。

いずれの方が良いかは、要件によって異なります。 OOPは問題のクラスを処理するための単なる方法であり、機能はうまくいくかもしれません。

関連する問題