2016-03-20 7 views
1

以下の2つの方法のうち、オブジェクトの変換にはどのような方法が適していますか?コンストラクタオブジェクトの変換のためのデザインパターンと表記

public class Foo { 
    int foo; 
} 

class Bar { 
    int bar; 
    public Bar(int bar) { 
    this.bar = bar; 
    } 

    public Bar(Foo foo) { 
    this.bar = foo.foo; 
    } 

} 

を用いASX()メソッド

public class Foo { 
    int foo; 
    public Bar asBar() { 
    return new Bar(foo); 
    } 
} 

class Bar { 
    int bar; 
    public Bar(int bar) { 
    this.bar = bar; 
    } 
} 

オブジェクト変換を用い

オブジェクト変換Iは、保守に関して(スケーラビリティ等いずれの方法の利点のわかりません.c)、他のものと比較して。確立された基準は何ですか?

私はこの質問がPaul Boddingtonによってコメントで指摘されているようにかなり広いと受け入れましたが、この質問が終了する前にいくつかの有用な議論を希望します。

+0

変換の責任は別のオブジェクトに置く必要があります。 'Foo'を' Bar'以外の別のタイプにも変換したいのであればどうでしょうか?あなたはあなたのクラスの変換メソッドの束で終わる。これだけでなく、後に他の変換方法を追加することにした場合、O/C原則に違反します。 –

+0

これまで提案された3つのアプローチに加えて、変換を行うための 'static'メソッドを持つこともできます。私はこの質問が本当に広いと思うし、正しい答えはありません。 –

+0

@VinceEmighオブジェクト間の変換にのみ使用されるクラスを導入して名前空間を混乱させるわけではありません。このような変換メソッドを、変換元/変換先のいずれかのクラスに配置することは意味があります。 – SamTebbs33

答えて

1

私は多くのことをよく見てきましたが、個人的には、多くのJDK自体が使用するスタイルが好きです。これには、宛先クラスに静的なファクトリメソッドが含まれています。究極の目的は、コードを読みやすくすることです。例えば

:OPの例から

Integer.fromString("42") 

貸出:

public class Foo { 
    int foo; 
} 

class Bar { 
    int bar; 

    public static Bar fromFoo(Foo foo) { 
    return new Bar(foo.foo); 
    } 

    public Bar(int bar) { 
    this.bar = bar; 
    } 

} 

誰かがFooからBarを作成することができますし、そうする際にコードがうまく読み取る方法

Bar bar = Bar.fromFoo(foo); 

COBOL!

関連する問題