Ich denke, der Artikel ist ein bisschen veraltet, da dies beim Lesen keine wirklich unorthodoxe oder neue Idee ist. Diese Idee wird als separates Muster dargestellt, wenn es sich tatsächlich nur um eine einfache Observer-Implementierung handelt. Wenn ich an meine damaligen Aktivitäten zurückdenke, erinnere ich mich, dass ich an der Logik gearbeitet habe, um hinter einer etwas komplexen Schnittstelle mit einer Reihe verschiedener Panels mit Daten zu sitzen, die voneinander abhängig waren. Der Benutzer konnte Werte ändern und / oder eine Optimierungsroutine ausführen, und basierend auf diesen Aktionen wurden Ereignisse generiert, die die Benutzeroberfläche abhören und bei Bedarf aktualisieren würde. Während der Entwicklung gab es eine Reihe von Problemen, bei denen bestimmte Panels nicht aktualisiert wurden, wenn sie sollten. Der Fix bestand darin, Ereignisse aus anderen Ereignissen zu generieren. Letztendlich funktionierte zu der Zeit alles richtig, Fast jede Änderung führte dazu, dass alle Bereiche aktualisiert wurden. Die ganze Komplexität des Versuchs zu isolieren, wann ein bestimmtes Panel aktualisiert werden musste, war umsonst. Und es war sowieso egal. Es war effektiv eine vorzeitige Optimierung. Ich hätte eine Menge Zeit und Mühe gespart, indem ich alles zu einem einzigen Ereignis zusammengefasst hätte, das alles auffrischt.
Es gibt unzählige Systeme, die entwickelt wurden, um "alles zu reparieren" oder alles aufzufrischen. Denken Sie an alle CRUD-Schnittstellen, die eine Zeile hinzufügen / aktualisieren und dann die Datenbank erneut abfragen. Dies ist kein exotischer Ansatz, sondern nur die offensichtliche, nicht clevere Lösung. Man muss erkennen, dass es 2003 die Höhe des "Musterfiebers" war. Soweit ich es beurteilen konnte, dachten die Leute, dass das Benennen neuer Muster ihr Weg zu Ruhm und Reichtum sein würde. Verstehen Sie mich nicht falsch, ich denke, das Konzept eines Musters ist äußerst nützlich, um abstrakte Lösungen zu beschreiben. Die Dinge sind ein bisschen von den Schienen gerutscht. Es ist bedauerlich, weil es eine Menge Zynismus in Bezug auf das Musterkonzept im Allgemeinen ausgelöst hat. Nur in diesem Zusammenhang ist es sinnvoll, von einer „unorthodoxen“ Lösung zu sprechen. Es' s ähnlich der Orthodoxie um ORMs oder DI-Container. Sie nicht zu verwenden, wird als unorthodox angesehen, obwohl die Leute schon lange vor der Existenz dieser Tools Software entwickelt haben und in vielen Fällen sind diese Tools übertrieben.
Also zurück zu "alles reparieren". Ein einfaches Beispiel sind Rechenmittel. Die einfache Lösung besteht darin, Zahlen zu summieren und durch die Kardinalität der Werte zu dividieren. Wenn Sie eine Nummer hinzufügen oder ändern, wiederholen Sie dies einfach von Anfang an. Sie können die Summe und die Anzahl der Zahlen verfolgen. Wenn jemand eine Zahl hinzufügt, erhöhen Sie die Anzahl und fügen sie der Summe hinzu. Jetzt fügen Sie nicht alle Nummern erneut hinzu. Wenn Sie jemals mit Excel mit einer Formel gearbeitet haben, die auf einen Bereich verweist, und einen einzelnen Wert in diesem Bereich geändert haben, haben Sie ein Beispiel für das Muster "Alles reparieren", dh jede Formel, die auf diesen Bereich verweist, wird neu berechnet, unabhängig davon, ob Dieser Wert war relevant (z. B. mit etwas wie sumif ()).
Das soll nicht heißen, dass dies in einem gegebenen Kontext keine kluge Wahl ist. Nehmen wir im mittleren Beispiel an, wir müssen jetzt Updates unterstützen. Jetzt muss ich den alten Wert irgendwie kennen und nur die Summe um das Delta ändern. Nichts davon ist wirklich herausfordernd, bis Sie in Betracht ziehen, dies in einer verteilten oder gleichzeitigen Umgebung zu tun. Sie müssen sich jetzt mit allen möglichen heiklen Timing-Problemen auseinandersetzen und es kommt wahrscheinlich zu einem großen Engpass, der die Dinge weitaus langsamer macht als eine Neuberechnung.
Das Fazit hier ist, dass es viel einfacher ist, alles zu reparieren oder alles zu aktualisieren, um es richtig zu machen. Sie können eine ausgefeiltere Herangehensweise verwenden, diese ist jedoch viel komplizierter und daher mit größerer Wahrscheinlichkeit fehlerhaft. Darüber hinaus kann in vielen Kontexten der Ansatz "Alles auffrischen" effizienter sein. Copy-on-Write-Ansätze sind beispielsweise bei Single-Thread-Ansätzen im Allgemeinen langsamer. Wenn Sie jedoch eine hohe Parallelität haben, können Sie Sperren vermeiden und somit eine bessere Leistung erzielen. In anderen Fällen können Sie Änderungen auf effiziente Weise stapeln. Bei den meisten Problemen möchten Sie wahrscheinlich mit dem Ansatz "Alles aktualisieren" beginnen, es sei denn, Sie haben einen bestimmten Grund, warum Sie dies nicht tun können, und sich dann darum kümmern, etwas Komplexeres zu tun, sobald Sie einen Bedarf haben.