2012-04-02 9 views
2

クラスFooから別のクラスBarにキャストする場合、変換のコードはFooまたはBarクラスに属している必要がありますか?変換コードはどのクラスに属していますか?

Foo f 

Bar b = f.ToBar() 

または:

Foo f 

Bar b = Bar.FromFoo(f) 

後者は、コンストラクタではなく、静的メソッドのように書き換えることができ、それはこの質問のポイントではありません。

もちろん、多くの場合、クラスの1つを変更できないと、あなたのために決定が下されます。例えば、私はカスタムクラスFooを持っていて、それを整数に変換したいと思っていました。

+0

Barからは、Bar型のオブジェクトを作成するので、Barを作成するすべての方法をカプセル化するのが自然です。また、静的ファクトリメソッドを持つことは、コンストラクタを使用するよりも理にかなっています。 –

+0

2つの可能な答えがあります。よいスタート。 – Matt

+0

なぜコンストラクタではなく変換メソッドを作成するのですか?私の意見では、新しいBar(f)はより論理的です。 – Betlista

答えて

2

あなたはこのように見ることができます:その関心は変換ですか? Fooは、Barと呼ばれる他のクラスがいくつかの点でそれを使用していることを知っているか気にする必要がありますか?もちろん違います。なぜなら、Fooを使用する他のクラスがいろいろな形であれば、Fooはそれらを処理しなければなりません。 No. したがって、最初に重要な点は、この機能をBarの側で実装する必要があることです。次に、二次的な重要性の問題、すなわちそれをどのように実装するかという問題が生じる。ここでは、それをコンストラクタとして実装すると、他の人が指摘しているように、より論理的でインラインのoopの原則です。

1

通常、操作は影響を受けるオブジェクト上に存在する必要があります。したがって、この場合はf.ToBar()になります。

関連する問題