Я намагаюся навчитися GRASP, і я виявив, що це пояснено ( тут, на сторінці 3 ) про низьке з'єднання, і я був дуже здивований, коли виявив це:
Розглянемо метод
addTrackдляAlbumкласу, два можливі методи:
addTrack( Track t )і
addTrack( int no, String title, double duration )Який метод зменшує з'єднання? Другий - так, оскільки клас, що використовує клас "Альбом", не повинен знати клас "Трек". Загалом, параметри методів повинні використовувати базові типи (int, char ...) та класи з пакетів java. *
Я схильний погодитися з цим; Я вважаю, що addTrack(Track t)це краще, ніж addTrack(int no, String title, double duration)через різні причини:
Завжди краще, щоб метод мав якомога менше параметрів (згідно Чистого кодексу дядька Боба жодного або одного, бажано, 2 в деяких випадках і 3 в особливих випадках; більше 3 потребує рефакторингу - це звичайно рекомендації, а не правила). .
Якщо
addTrackце метод інтерфейсу, і вимоги потребують, щоб у a булоTrackмати більше інформації (скажімо, рік чи жанр), тоді інтерфейс потрібно змінити, щоб метод підтримував інший параметр.Інкапсуляція порушена; якщо
addTrackв інтерфейсі, то він не повинен знати внутрішніх данихTrack.Це насправді більше поєднано по-другому, з багатьма параметрами. Припустимо,
noпараметр потрібно змінити зintна,longтому що їх більше, ніжMAX_INTтреків (або з будь-якої причини); то і те,Trackі метод потрібно змінити, тоді як якщо методом було бaddTrack(Track track)лише те,Trackбуло б змінено.
Всі 4 аргументи насправді пов’язані між собою, а деякі з них є наслідками з боку інших.
Який підхід кращий?