私は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つの引数はすべて実際には相互に関連しており、それらの一部は他からの結果です。
どのアプローチが良いですか?