Wie Sie sagen, sind Ereignisse ein großartiges Werkzeug, um die Kopplung zwischen Klassen zu verringern. Es kann zwar erforderlich sein, zusätzlichen Code in einigen Sprachen zu schreiben, ohne dass Ereignisse unterstützt werden, dies verringert jedoch die Komplexität des Gesamtbilds.
Ereignisse sind wohl eines der wichtigsten Werkzeuge in OO (laut Alan Kay kommunizieren Objekte durch das Senden und Empfangen von Nachrichten ). Wenn Sie eine Sprache verwenden, die Ereignisse unterstützt, oder Funktionen als erstklassige Bürger behandelt, ist ihre Verwendung ein Kinderspiel.
Sogar in Sprachen ohne eingebaute Unterstützung ist die Menge an Boilerplate für etwas wie das Observer-Muster ziemlich gering. Möglicherweise finden Sie irgendwo eine anständige generische Eventing-Bibliothek, die Sie in all Ihren Anwendungen verwenden können, um das Boilerplate zu minimieren. (Ein generischer Ereignisaggregator oder Ereignismediator ist in nahezu jeder Anwendung nützlich.)
Lohnt es sich in einer kleinen Anwendung? Ich würde definitiv ja sagen .
- Wenn Sie die Klassen voneinander entkoppelt halten, bleibt Ihr Klassenabhängigkeitsdiagramm übersichtlich.
- Klassen ohne konkrete Abhängigkeiten können isoliert getestet werden, ohne dass andere Klassen in den Tests berücksichtigt werden.
- Klassen ohne konkrete Abhängigkeiten erfordern weniger Komponententests für eine vollständige Abdeckung.
Wenn Sie denken "Oh, aber es ist wirklich nur eine sehr kleine Anwendung, es ist wirklich nicht so wichtig" , bedenken Sie:
- Kleine Anwendungen werden manchmal später mit größeren Anwendungen kombiniert.
- Kleine Anwendungen enthalten wahrscheinlich mindestens einige Logikkomponenten oder Komponenten, die später möglicherweise in anderen Anwendungen wiederverwendet werden müssen.
- Die Anforderungen für kleine Anwendungen können sich ändern, sodass eine Umgestaltung erforderlich ist. Dies ist einfacher, wenn vorhandener Code entkoppelt wird.
- Weitere Funktionen können später hinzugefügt werden, sodass der vorhandene Code erweitert werden muss. Dies ist auch viel einfacher, wenn der vorhandene Code bereits entkoppelt ist.
- Bei lose gekoppeltem Code dauert das Schreiben im Allgemeinen nicht viel länger als bei fest gekoppeltem Code. Bei eng gekoppeltem Code dauert das Umgestalten und Testen jedoch viel länger als bei lose gekoppeltem Code.
Insgesamt sollte die Größe einer Anwendung kein entscheidender Faktor dafür sein, ob Klassen lose gekoppelt bleiben sollen. SOLID-Prinzipien gelten nicht nur für große Anwendungen, sondern für Software und Codebasen in jeder Größenordnung.
Tatsächlich sollte die Zeitersparnis beim Unit-Testen Ihrer lose gekoppelten Klassen für sich genommen die zusätzliche Zeit ausgleichen, die zum Entkoppeln dieser Klassen aufgewendet wurde.