私はGRASPを学ぼうとしていますが、これは低結合について説明されています(ここ3ページにあります)。
クラスのメソッド
addTrack
について考えてみましょうAlbum
。2つの可能なメソッドは次のとおりです。
addTrack( Track t )
そして
addTrack( int no, String title, double duration )
どの方法で結合が減少しますか?Albumクラスを使用するクラスはTrackクラスを知る必要がないので、2番目のものはそうします。一般に、メソッドへのパラメーターは、java。*パッケージの基本型(int、char ...)およびクラスを使用する必要があります。
私はこれに反対する傾向があります。私はさまざまな理由addTrack(Track t)
よりも優れていると信じていますaddTrack(int no, String title, double duration)
:
メソッドのパラメーターはできるだけ少ないほうが常に良いです(Uncle BobのClean Codeによれば、なしまたは1つ、できれば2、場合によっては3、特別な場合は3、3つ以上はリファクタリングが必要です-これらはもちろん推奨ルールではありません) 。
場合
addTrack
のインタフェースの方法であり、要件がいることを必要とするTrack
より多くの情報(たとえば年またはジャンル)を持っている必要があり、インターフェイスを変更する必要があるので、この方法は、別のパラメータがサポートする必要があること。カプセル化が壊れています。
addTrack
がインターフェイス内にある場合、の内部を知らないはずTrack
です。実際には、多くのパラメーターを使用して、2番目の方法でより結合されています。仮定
no
から変更するパラメータニーズをint
へlong
以上があるのでMAX_INT
、トラック(または何らかの理由で)。Track
メソッドとメソッドの両方を変更する必要がありますが、メソッドaddTrack(Track track)
のみTrack
が変更される場合は変更します。
4つの引数はすべて実際には相互に関連しており、それらの一部は他からの結果です。
どのアプローチが良いですか?