Jak mówisz, wydarzenia są doskonałym narzędziem do zmniejszania sprzężenia między klasami; więc chociaż może wymagać pisania dodatkowego kodu w niektórych językach bez wbudowanej obsługi zdarzeń, zmniejsza złożoność dużego obrazu.
Zdarzenia są prawdopodobnie jednym z najważniejszych narzędzi w OO (według Alana Kay - Obiekty komunikują się poprzez wysyłanie i odbieranie wiadomości ). Jeśli używasz języka, który ma wbudowane wsparcie dla wydarzeń lub traktuje funkcje jak pierwszorzędni obywatele, korzystanie z nich nie stanowi problemu.
Nawet w językach bez wbudowanego wsparcia ilość płyty kotłowej dla czegoś takiego jak wzór Observer jest dość minimalna. Możesz znaleźć gdzieś przyzwoitą bibliotekę zdarzeń ogólnych, której możesz użyć we wszystkich swoich aplikacjach, aby zminimalizować płytę kotłową. (Ogólny agregator zdarzeń lub mediator zdarzeń jest przydatny w prawie każdym rodzaju aplikacji).
Czy warto w małej aplikacji? Powiedziałbym zdecydowanie tak .
- Utrzymywanie oddzielonych klas od siebie powoduje, że wykres zależności klasowych jest czysty.
- Klasy bez konkretnych zależności mogą być testowane oddzielnie bez uwzględnienia innych klas w testach.
- Klasy bez konkretnych zależności wymagają mniej testów jednostkowych dla pełnego pokrycia.
Jeśli myślisz „Och, ale to naprawdę bardzo mała aplikacja, to tak naprawdę nie ma tak wielkiego znaczenia” , zastanów się:
- Małe aplikacje czasem kończą się później z większymi aplikacjami.
- Małe aplikacje prawdopodobnie zawierają przynajmniej pewną logikę lub komponenty, które mogą później wymagać ponownego wykorzystania w innych aplikacjach.
- Wymagania dotyczące małych aplikacji mogą ulec zmianie, co powoduje konieczność refaktoryzacji, co jest łatwiejsze, gdy istniejący kod jest oddzielony.
- Dodatkowe funkcje można dodać później, powodując potrzebę rozszerzenia istniejącego kodu, co jest również znacznie łatwiejsze, gdy istniejący kod jest już oddzielony.
- Kod luźno powiązany zwykle nie zajmuje dużo więcej czasu niż kod ściśle sprzężony; ale kod ściśle powiązany zajmuje znacznie więcej czasu na refaktoryzację i testowanie niż kod luźno powiązany.
Ogólnie rzecz biorąc, rozmiar aplikacji nie powinien decydować o tym, czy klasy powinny być luźno powiązane; Zasady SOLID dotyczą nie tylko dużych aplikacji, ale mają zastosowanie do oprogramowania i baz kodów w dowolnej skali.
W rzeczywistości czas zaoszczędzony na testowaniu jednostek luźno powiązanych klas w oderwaniu powinien równoważyć każdy dodatkowy czas spędzony na oddzieleniu tych klas.