2017-09-11 11 views
0

など。以下のような状況のための規則は何クラス(クラスB)のメソッド(クラスAから)を呼び出して、クラス(C)のメソッドを呼び出したり、クラスBのクラスCのゲッターを使用するのが最善でしょうか?

b.getClassC().doThing(); 

:クラスBでは

b.doThing(); 

:クラスAでは

doThing() { 
    c.doThing(); 
} 

OR

クラスAでは

この?

+0

クラスBのCオブジェクトを非表示にするかどうかによって異なります。 Cが変更可能な場合は、それを非表示にすることをお勧めします(BのgetC()メソッドを持たないようにする)。 – Eran

+0

これはあまり一般的ではないので、有用ではなく意見に基づく回答が得られます。実際のユースケースを提示してください。より良い回答が得られるかもしれません。 – RealSkeptic

+0

あなたの目標がパフォーマンスかどうか(ゲッタを使用するかどうか)、メンテナンス性を望むかどうか(最初の方法に従うかどうか)によって異なります。ここでのほとんどの回答と同様に、パフォーマンスの向上はほとんど存在しないため、保守性を保つことをお勧めします。 –

答えて

7

Law of Demeterによると、まず最初に、クラスBのメソッドを呼び出すだけで、クラスCに委譲する必要があります。この方法では、クラス間の依存関係を減らすことができます。これは基本的に再利用性と保守性。

0

実装したクラスは、などの状態をチェックする/設定するか、または他の方法を準備する例えば

を1行を実行する以上に、このの大きな利点は、あなたがいないということですかしていない限り、通常、第2ケースとなりますdoThingは、あなたが他の多くのパラメータまたはを供給することになるで構造的または系統的に変更される場合は気にしない

b.getClassC().doThing(); 

を呼び出すことにより、実装の詳細について心配する必要があります。

0

オブジェクトの向きは約です。オブジェクトを取得すると、が実行されます。それで、あなたは何かをするために「b」を求めるほうがいいですし、それを「c」と呼ぶという事実はあなたから隠されています。あなたは、そのコンポーネントオブジェクトのために 'b'を尋ねるのではなく、それらを使って何かをしたいと思います。

関連する問題