Cześć,
dzisiaj chciałbym omówić powiązane ze sobą wzorce. Są to niska liczba powiązań (low couple) oraz wysoka spójność(high cohesion)
Jeżeli jesteś po raz pierwszy w tej serii, zobacz także poprzedni artykuł tutaj
Właściwie po co nam jest niska liczba powiązań i wysoka spójność w klasach?
Przecież napiszemy sobie klasę, przekażemy sobie parę klas przez parametr, wykorzystam ich metody zagłębione o 2 pozycje (obiekt.metoda1().metod2()) i jest fajnie, no nie?
Otóż nie, w przypadku javy, (który jest językiem obiektowym) nie chcemy mieć silnie powiązanych ze sobą klas, które po usunięciu jednej z nich powoduje nie działanie całego programu. Naszym celem jest raczej stworzenie pewnych modułów, które zostają łączone w pewnych klasach.
Co to znaczy?
To znaczy, że chcemy posiadać pewne części kodu, które po wycięciu ich z programu, będą mogły zostać użyte zupełnie gdzieś indziej. Moduł możemy traktować jako bibliotekę z daną funkcjonalnością.
To teraz zadajmy sobie pytanie jak możemy utrzymać kod z niską liczbą powiązań i wysoką spójnością w naszych klasach.
Musimy określić czy chcemy aby nasza klasa robiła wiele funkcjonalności, czy też ma przekazywać zadania innym klasom.
Im większa odpowiedzialność klasy, tym mniejsza jest jej spójność.
Wzorce low coupling i high cohesion powinny jedynie weryfikować czy przypisane odpowiedzialności do klas są sensowne. Jeżeli nie, to jak można rozdzielić funkcjonalności na pomniejsze klasy używając innych wzorców projektowych.
Tutaj przykładu kodu nie będzie, natomiast możemy sobie wyobrazić, że mamy klasę, która robi wiele rzeczy. Sprawdzając jakie ta klasa ma funkcjonalności, możemy użyć wzorca expert, żeby oddzielić funkcjonalność do osobnej klasy. Następnie delegować jej jakieś zadanie. i robić to tak długo, aż nasza klasa będzie posiadała jedynie najważniejszą funkcjonalność. Następnie weryfikujemy klasę poprzez wzorce high cohesion i low coupling czy została dostatecznie uproszczona.
Wzorce te pokrywają się z wzorcem single responsibility(pojedynczej odpowiedzialność).
Jeżeli czegoś nie rozumiecie, bądź post ma błąd, piszcie o tym w komentarzach :)