Я намагаюся навчитися 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 аргументи насправді пов’язані між собою, а деякі з них є наслідками з боку інших.
Який підхід кращий?