Penso che l'articolo sia un po 'datato perché, mentre lo leggo, questa non è affatto un'idea non ortodossa o nuova. Questa idea è presentata come un modello separato quando in realtà è solo una semplice implementazione di Observer. Ripensando a quello che stavo facendo in quel momento, ricordo di aver lavorato sulla logica per sedermi dietro un'interfaccia piuttosto complessa con un numero di pannelli diversi con dati interdipendenti. L'utente potrebbe modificare i valori e / o eseguire una routine di ottimizzazione e sulla base di tali azioni, sono stati generati eventi che l'interfaccia utente avrebbe ascoltato e aggiornato secondo necessità. Durante lo sviluppo c'erano diversi problemi in cui alcuni pannelli non si aggiornavano quando avrebbero dovuto. La correzione (rimanendo all'interno del progetto) era generare eventi da altri eventi. Alla fine, quando tutto funzionava bene, quasi ogni modifica ha comportato l'aggiornamento di tutti i pannelli. Tutta la complessità del tentativo di isolare quando un determinato pannello doveva essere aggiornato era nulla. E non importava comunque. È stata effettivamente un'ottimizzazione prematura. Avrei risparmiato un sacco di tempo e fatica semplicemente facendo crollare tutto in un singolo evento che ha rinfrescato tutto.
Esistono innumerevoli sistemi progettati nel "aggiustare tutto" o aggiornare tutto in modo. Pensa a tutte le interfacce CRUD che aggiungono / aggiornano una riga e quindi richiedono il DB. Questo non è un approccio esotico, è solo l'ovvia soluzione non intelligente. Bisogna rendersi conto che nel 2003, era l'altezza della "febbre modello". Da quello che ho potuto dire, la gente pensava che nominare nuovi modelli sarebbe stato il loro percorso verso la fama e la ricchezza. Non fraintendetemi, penso che il concetto di modello sia estremamente utile per descrivere soluzioni in astratto. Le cose sono andate un po 'fuori dai binari. È sfortunato perché ha creato molto cinismo sul concetto di modello in generale. È solo in questo contesto che ha senso parlarne come una soluzione "non ortodossa". E' s simile all'ortodossia attorno agli ORM o ai contenitori DI. Non usarli è visto come non ortodosso anche se le persone avevano sviluppato software molto prima che esistessero questi strumenti e in molti casi quegli strumenti sono eccessivi.
Quindi torniamo a "aggiustare tutto". Un semplice esempio è il calcolo dei mezzi. La soluzione semplice è sommare i numeri e dividerli per la cardinalità dei valori. Se aggiungi o modifichi un numero, lo fai di nuovo dall'inizio. È possibile tenere traccia della somma e del conteggio dei numeri e quando qualcuno aggiunge un numero, si aumenta il conteggio e lo si aggiunge alla somma. Ora non stai aggiungendo nuovamente tutti i numeri. Se hai mai lavorato con Excel con una formula che fa riferimento a un intervallo e ha modificato un singolo valore in quell'intervallo, hai un esempio del modello 'aggiusta tutto', ovvero qualsiasi formula che ha un riferimento a quell'intervallo verrà ricalcolata indipendentemente dal fatto che quel valore era rilevante (ad esempio usando qualcosa come sumif ()).
Questo non vuol dire che non sia una scelta intelligente in un determinato contesto. Nell'esempio medio, supponiamo che ora dobbiamo supportare gli aggiornamenti. Ora ho bisogno di conoscere il vecchio valore in qualche modo e cambiare la somma solo con il delta. Niente di tutto questo è davvero così impegnativo finché non si considera di provare a farlo in un ambiente distribuito o concorrente. Ora devi gestire tutti i tipi di problemi di tempistica spinosi e probabilmente finirai per creare un grosso collo di bottiglia che rallenta le cose molto più del ricalcolo.
Il risultato qui è che l'approccio "aggiusta tutto" o "aggiorna tutto" è molto più facile da ottenere. Puoi far funzionare un approccio più sofisticato, ma è molto più complicato e quindi più probabile che sia imperfetto. Inoltre, in molti contesti, l'approccio "aggiorna tutto" può essere più efficiente. Ad esempio, gli approcci di copia su scrittura sono generalmente più lenti per gli approcci a thread singolo ma quando si ha una concorrenza elevata, può consentire di evitare blocchi e quindi fornire prestazioni migliori. In altri casi, può consentire di raggruppare le modifiche in modo efficiente. Quindi, per la maggior parte dei problemi, probabilmente vuoi iniziare con un approccio di aggiornamento di tutto, a meno che tu non abbia un motivo specifico per cui non puoi farlo e quindi preoccuparti di fare qualcosa di più complesso quando ne hai bisogno.