Eu acho que o artigo é um pouco datado, porque, enquanto eu o li, não é realmente uma idéia heterodoxa ou nova. Essa idéia é apresentada como um padrão separado quando na verdade é apenas uma implementação simples do Observer. Pensando no que estava fazendo na época, lembro-me de trabalhar na lógica para ficar atrás de uma interface um tanto complexa com vários painéis diferentes com dados interdependentes. O usuário pode alterar valores e / ou executar uma rotina de otimização e, com base nessas ações, foram gerados eventos que a interface do usuário ouviria e atualizaria conforme necessário. Houve vários problemas durante o desenvolvimento em que determinados painéis não eram atualizados quando deveriam. A correção (permanecendo dentro do design) era gerar eventos de outros eventos. Por fim, quando tudo estava funcionando corretamente, quase todas as alterações resultaram na atualização de todos os painéis. Toda a complexidade de tentar isolar quando um determinado painel precisava ser atualizado era inútil. E isso não importava de qualquer maneira. Foi efetivamente uma otimização prematura. Eu teria economizado uma tonelada de tempo e esforço simplesmente juntando tudo em um único evento que atualizou tudo.
Existem inúmeros sistemas projetados no "conserte tudo" ou atualize tudo. Pense em todas as interfaces CRUD que adicionam / atualizam uma linha e depois solicitam o banco de dados. Esta não é uma abordagem exótica, é apenas a solução óbvia e não inteligente. Você tem que perceber que em 2003, era o auge da 'febre padrão'. Pelo que pude perceber, as pessoas pensavam que nomear novos padrões seria o caminho para a fama e a riqueza. Não me interpretem mal, acho que o conceito de padrão é extremamente útil para descrever soluções em abstrato. As coisas meio que saíram dos trilhos um pouco. É lamentável, porque criou muito cinismo sobre o conceito de padrão em geral. É apenas neste contexto que faz sentido falar sobre isso como uma solução "não ortodoxa". Isto' é semelhante à ortodoxia em torno de ORMs ou DI containers. Não usá-los é visto como pouco ortodoxo, mesmo que as pessoas estivessem construindo software muito antes de essas ferramentas existirem e, em muitos casos, essas ferramentas são um exagero.
Então, volte para 'consertar tudo'. Um exemplo simples é calcular meios. A solução simples é somar números e dividir pela cardinalidade dos valores. Se você adicionar ou modificar um número, basta fazê-lo novamente, desde o início. Você pode acompanhar a soma e a contagem de números e quando alguém adiciona um número, você aumenta a contagem e a adiciona à soma. Agora você não está adicionando todos os números novamente. Se você já trabalhou com o Excel com uma fórmula que faz referência a um intervalo e modificou um único valor nesse intervalo, você tem um exemplo do padrão 'corrigir tudo', ou seja, qualquer fórmula que tenha uma referência a esse intervalo será recalculada, independentemente de esse valor era relevante (por exemplo, usando algo como sumif ()).
Isso não quer dizer que essa não seja uma escolha inteligente em um determinado contexto. No exemplo médio, digamos que agora precisamos oferecer suporte a atualizações. Agora eu preciso conhecer o valor antigo de alguma forma e apenas alterar a soma pelo delta. Nada disso é realmente tão desafiador até que você considere tentar fazer isso em um ambiente distribuído ou simultâneo. Agora você precisa lidar com todos os tipos de problemas de tempo espinhosos e provavelmente acabará criando um grande gargalo que atrasa as coisas muito mais do que recalcular.
O resultado aqui é que a abordagem 'conserte tudo' ou 'atualize tudo' é muito mais fácil de acertar. Você pode fazer com que uma abordagem mais sofisticada funcione, mas é muito mais complicada e, portanto, tem mais chances de ser falha. Além disso, em muitos contextos, a abordagem 'atualizar tudo' pode ser mais eficiente. Por exemplo, as abordagens de cópia em gravação geralmente são mais lentas para abordagens de encadeamento único, mas quando você tem alta simultaneidade, pode evitar bloqueios e, portanto, fornecer melhor desempenho. Em outros casos, pode permitir que você faça alterações em lote de maneira eficiente. Portanto, para a maioria dos problemas, você provavelmente deseja começar com uma abordagem de atualizar tudo, a menos que tenha um motivo específico para não fazê-lo e depois se preocupar em fazer algo mais complexo quando precisar.