Come dici tu, gli eventi sono un ottimo strumento per ridurre l'accoppiamento tra le classi; pertanto, sebbene possa comportare la scrittura di codice aggiuntivo in alcune lingue senza il supporto integrato per gli eventi, riduce la complessità del quadro generale.
Gli eventi sono probabilmente uno degli strumenti più importanti in OO (Secondo Alan Kay - Gli oggetti comunicano inviando e ricevendo messaggi ). Se usi una lingua che ha il supporto integrato per gli eventi o tratta le funzioni come cittadini di prima classe, utilizzarli è un gioco da ragazzi.
Anche in lingue senza supporto incorporato, la quantità di piastra di caldaia per qualcosa come il modello Observer è abbastanza minima. Potresti essere in grado di trovare una libreria di eventi generica decente da qualche parte che puoi utilizzare in tutte le tue applicazioni per ridurre al minimo la piastra di cottura. (Un aggregatore di eventi generico o un mediatore di eventi è utile in quasi ogni tipo di applicazione).
Vale la pena in una piccola applicazione? Direi decisamente di sì .
- Mantenere le classi disaccoppiate le une dalle altre mantiene pulito il grafico delle dipendenze delle classi.
- Le classi prive di dipendenze concrete possono essere testate isolatamente senza considerare altre classi nei test.
- Le classi senza dipendenze concrete richiedono meno test unitari per una copertura completa.
Se stai pensando "Oh, ma è davvero solo un'applicazione molto piccola, non ha molta importanza" , considera:
- Le piccole applicazioni a volte finiscono per essere combinate con applicazioni più grandi in seguito.
- È probabile che le applicazioni di piccole dimensioni includano almeno una parte della logica o dei componenti che potrebbero essere successivamente riutilizzati in altre applicazioni.
- I requisiti per le piccole applicazioni possono cambiare, suggerendo la necessità di refactoring, il che è più semplice quando il codice esistente viene disaccoppiato.
- Ulteriori funzionalità possono essere aggiunte in seguito, suggerendo la necessità di estendere il codice esistente, che è anche molto più semplice quando il codice esistente è già disaccoppiato.
- Il codice liberamente accoppiato generalmente non richiede molto più tempo per scrivere rispetto al codice strettamente accoppiato; ma il codice strettamente accoppiato richiede molto più tempo per il refactoring e il test rispetto al codice debolmente accoppiato.
Nel complesso, la dimensione di un'applicazione non dovrebbe essere un fattore decisivo per mantenere le classi liberamente accoppiate; I principi SOLID non sono solo per grandi applicazioni, ma sono applicabili a software e codebase su qualsiasi scala.
In effetti, il tempo risparmiato in unità per testare le classi allentate in modo isolato dovrebbe controbilanciare qualsiasi ulteriore tempo speso disaccoppiando quelle classi.