我正在尝试学习GRASP,我发现了有关低耦合的解释(在第3页上),当我发现这一点时,我感到非常惊讶:
考虑
addTrack
一个Album
类的方法,两种可能的方法是:
addTrack( Track t )
和
addTrack( int no, String title, double duration )
哪种方法可以减少耦合?第二个则需要,因为使用Album类的类不必知道Track类。通常,方法的参数应使用基本类型(int,char ...)和java。*包中的类。
我倾向于不同意这一点。我相信addTrack(Track t)
胜于addTrack(int no, String title, double duration)
各种原因:
最好总是使用尽可能少的参数的方法(根据Bob叔叔的“清洁代码”,最好是无或一个,在某些情况下为2,在特殊情况下为3;超过3的需求需要重构-这些当然是建议,而不是冬青规则) 。
如果
addTrack
是接口的一种方法,并且要求aTrack
应该具有更多的信息(例如年份或类型),则需要更改接口,以便该方法应支持另一个参数。封装破裂;如果
addTrack
在接口中,则它不应该知道的内部Track
。实际上,它在第二种方式中与许多参数耦合在一起。假设
no
参数需要被改变,从int
到long
,因为有超过MAX_INT
轨道(或无论何种原因); 则Track
必须同时更改和方法,而如果addTrack(Track track)
仅更改方法,则需要Track
更改。
这四个参数实际上是相互关联的,其中一些是其他因素的结果。
哪种方法更好?