Я думаю, что статья немного устарела, потому что, когда я ее читаю, это вовсе не неортодоксальная или новая идея. Эта идея представлена в виде отдельного шаблона, когда она на самом деле является простой реализацией Observer. Вспоминая то, что я делал в то время, я помню, как работал над логикой, чтобы сидеть за довольно сложным интерфейсом с множеством различных панелей с данными, которые были взаимозависимы. Пользователь может изменить значения и / или запустить процедуру оптимизации, и на основе этих действий генерируются события, которые пользовательский интерфейс будет прослушивать и обновлять по мере необходимости. Во время разработки был ряд проблем, когда некоторые панели не обновлялись, когда должны были. Исправление (оставаясь в дизайне) состояло в том, чтобы генерировать события из других событий. В конце концов, к тому времени, когда все заработало, почти каждое изменение привело к обновлению всех панелей. Вся сложность попытки выделить нужную панель для обновления была напрасной. И все равно это не имело значения. Это была преждевременная оптимизация. Я бы сэкономил массу времени и усилий, просто сложив все это в одно событие, которое обновило бы все.
Существуют бесчисленные системы, разработанные для «все исправить» или «обновить все». Подумайте обо всех интерфейсах CRUD, которые добавляют / обновляют строку, а затем запрашивают БД. Это не экзотический подход, это просто очевидное неумное решение. Вы должны понять, что в 2003 году это была вершина «шаблонной лихорадки» Исходя из того, что я мог сказать, люди думали, что присвоение новых образцов будет их путем к славе и богатству. Не поймите меня неправильно, я думаю, что концепция шаблона чрезвычайно полезна для описания решений абстрактно. Вещи просто немного сошли с рельсов. Это прискорбно, потому что это вызвало большой цинизм в отношении концепции паттерна в целом. Только в этом контексте имеет смысл говорить об этом как о «неортодоксальном» решении. Это' Схожи с ортодоксальностью вокруг ORM или DI-контейнеров. Неиспользование их считается неортодоксальным, даже несмотря на то, что люди создавали программное обеспечение задолго до того, как эти инструменты появились, и во многих случаях эти инструменты излишни.
Итак, вернемся к «исправить все». Простым примером является расчет средств. Простое решение состоит в суммировании чисел и делении на количество значений. Если вы добавляете или изменяете число, вы просто делаете это снова, с самого начала. Вы можете отслеживать сумму и количество чисел, а когда кто-то добавляет число, вы увеличиваете количество и добавляете его к сумме. Теперь вы не добавляете все цифры снова. Если вы когда-либо работали с Excel с формулой, которая ссылается на диапазон, и изменили одно значение в этом диапазоне, у вас есть пример шаблона «исправить все», то есть любая формула, которая имеет ссылку на этот диапазон, будет пересчитываться независимо от того, это значение было релевантным (например, используя что-то вроде sumif ()).
Нельзя сказать, что это не разумный выбор в данном контексте. В среднем примере, скажем, нам теперь нужно поддерживать обновления. Теперь мне нужно как-то узнать старое значение и только изменить сумму на дельту. Ничто из этого не является таким сложным, пока вы не решите попытаться сделать это в распределенной или параллельной среде. Теперь вам нужно решить все острые проблемы времени, и вы, скорее всего, в конечном итоге создадите серьезное узкое место, которое замедляет вещи гораздо больше, чем пересчет.
В результате, подход «исправить все» или «обновить все» гораздо проще понять. Вы можете сделать более сложный подход, но он намного сложнее и, следовательно, с большей вероятностью будет ошибочным. Кроме того, во многих случаях подход «обновить все» может быть более эффективным. Например, подходы копирования при записи обычно медленнее для однопоточных подходов, но когда у вас высокий параллелизм, это может позволить вам избежать блокировок и, следовательно, обеспечить лучшую производительность. В других случаях это может позволить вам эффективно объединять изменения в пакет. Поэтому для большинства проблем вы, вероятно, захотите начать с подхода обновления всего, если только у вас нет конкретной причины, по которой вы не можете это сделать, а затем беспокоиться о том, чтобы сделать что-то более сложное, когда у вас возникнет такая необходимость.