Próbuję nauczyć się GRASP i znalazłem to wyjaśnione ( tutaj na stronie 3 ) o niskim sprzężeniu i byłem bardzo zaskoczony, gdy to znalazłem:
Rozważ metodę
addTrack
dlaAlbum
klasy, dwie możliwe metody to:
addTrack( Track t )
i
addTrack( int no, String title, double duration )
Która metoda zmniejsza sprzężenie? Drugi tak, ponieważ klasa korzystająca z klasy Album nie musi znać klasy Track. Zasadniczo parametry metod powinny wykorzystywać typy podstawowe (int, char ...) i klasy z pakietów java. *.
Mam skłonność do tego. Uważam, że addTrack(Track t)
jest lepszy niż addTrack(int no, String title, double duration)
z różnych powodów:
Zawsze lepiej jest, aby metoda miała jak najmniejszą liczbę parametrów (zgodnie z Clean Code wujka Boba brak lub jeden najlepiej, 2 w niektórych przypadkach i 3 w szczególnych przypadkach; więcej niż 3 wymaga refaktoryzacji - są to oczywiście zalecenia, a nie holly reguły) .
Jeśli
addTrack
jest to metoda interfejsu, a wymagania musząTrack
zawierać więcej informacji (powiedzmy rok lub gatunek), należy zmienić interfejs, aby metoda obsługiwała inny parametr.Kapsułkowanie jest zepsute; jeśli
addTrack
jest w interfejsie, to nie powinien znać elementów wewnętrznychTrack
.W rzeczywistości jest bardziej sprzężony w drugi sposób, z wieloma parametrami. Załóżmy, że
no
parametr należy zmienić zint
na,long
ponieważ istnieje więcej niżMAX_INT
ścieżki (lub z dowolnego powodu); wtedy zarównoTrack
metoda, jak i metoda muszą zostać zmienione, a jeśli metoda byłabyaddTrack(Track track)
tylkoTrack
zmieniona.
Wszystkie 4 argumenty są faktycznie ze sobą powiązane, a niektóre z nich są konsekwencjami innych.
Które podejście jest lepsze?