我正在尝试学习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更改。
这四个参数实际上是相互关联的,其中一些是其他因素的结果。
哪种方法更好?