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ę
addTrackdlaAlbumklasy, 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
addTrackjest to metoda interfejsu, a wymagania musząTrackzawierać więcej informacji (powiedzmy rok lub gatunek), należy zmienić interfejs, aby metoda obsługiwała inny parametr.Kapsułkowanie jest zepsute; jeśli
addTrackjest 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
noparametr należy zmienić zintna,longponieważ istnieje więcej niżMAX_INTścieżki (lub z dowolnego powodu); wtedy zarównoTrackmetoda, jak i metoda muszą zostać zmienione, a jeśli metoda byłabyaddTrack(Track track)tylkoTrackzmieniona.
Wszystkie 4 argumenty są faktycznie ze sobą powiązane, a niektóre z nich są konsekwencjami innych.
Które podejście jest lepsze?