Myślę, że artykuł jest nieco przestarzały, ponieważ kiedy go czytam, nie jest to wcale niekonwencjonalny lub nowy pomysł. Pomysł ten jest przedstawiany jako osobny wzorzec, gdy jest tak naprawdę prostą implementacją Observera. Wracając do tego, co wtedy robiłem, pamiętam pracę nad logiką, aby usiąść za nieco złożonym interfejsem z wieloma różnymi panelami z danymi, które były od siebie zależne. Użytkownik może zmienić wartości i / lub uruchomić procedurę optymalizacji i na podstawie tych działań wygenerowano zdarzenia, których interfejs użytkownika będzie nasłuchiwał i aktualizował w razie potrzeby. Podczas opracowywania pojawiło się wiele problemów, w których niektóre panele nie aktualizowały się, kiedy powinny. Poprawka (pozostawanie w projekcie) polegała na generowaniu zdarzeń z innych zdarzeń. Ostatecznie, zanim wszystko działało poprawnie, prawie każda zmiana powodowała odświeżenie wszystkich paneli. Cała złożoność próby wyizolowania, kiedy dany panel wymagał odświeżenia, była niczym. I tak to nie miało znaczenia. To była przedwczesna optymalizacja. Zaoszczędziłbym mnóstwo czasu i wysiłku, po prostu łącząc to wszystko w jedno wydarzenie, które odświeżyło wszystko.
Istnieje niezliczona ilość systemów zaprojektowanych w „napraw wszystko” lub odświeżyć wszystko. Pomyśl o wszystkich interfejsach CRUD, które dodają / aktualizują wiersz, a następnie wymagają DB. To nie jest egzotyczne podejście, to po prostu oczywiste, niemądre rozwiązanie. Musisz zdać sobie sprawę, że w 2003 roku była to „gorączka wzorca”. Z tego, co mogłem powiedzieć, ludzie myśleli, że nazwanie nowych wzorów będzie ich drogą do sławy i bogactwa. Nie zrozumcie mnie źle, myślę, że koncepcja wzoru jest niezwykle przydatna do opisywania rozwiązań w sposób abstrakcyjny. Po prostu sprawy trochę się zepsuły. Jest to niefortunne, ponieważ wywołało wiele cynizmu w kwestii ogólnej koncepcji wzorca. Tylko w tym kontekście sensowne jest mówienie o tym jako o „niekonwencjonalnym” rozwiązaniu. To' jest podobny do ortodoksji wokół ORM lub pojemników DI. Nieużywanie ich jest postrzegane jako niekonwencjonalne, mimo że ludzie budowali oprogramowanie na długo zanim istniały te narzędzia, aw wielu przypadkach narzędzia te są nadmierne.
Wróćmy więc do „napraw wszystko”. Prostym przykładem są środki obliczeniowe. Najprostszym rozwiązaniem jest zsumowanie liczb i podzielenie przez liczność wartości. Jeśli dodasz lub zmodyfikujesz numer, po prostu zrób to od początku. Możesz śledzić sumę i liczbę liczb, a gdy ktoś doda liczbę, zwiększasz liczbę i dodajesz ją do sumy. Teraz nie dodajesz ponownie wszystkich liczb. Jeśli kiedykolwiek pracowałeś z programem Excel z formułą, która odwołuje się do zakresu i modyfikowałeś pojedynczą wartość w tym zakresie, masz przykład wzorca „napraw wszystko”, tj. Każda formuła, która ma odniesienie do tego zakresu, zostanie ponownie obliczona bez względu na to, czy ta wartość była istotna (np. używając czegoś takiego jak sumif ()).
Nie oznacza to, że nie jest to mądry wybór w danym kontekście. W średnim przykładzie powiedzmy, że musimy teraz wspierać aktualizacje. Teraz muszę jakoś poznać starą wartość i zmienić sumę tylko przez deltę. Nic z tego nie jest tak trudne, dopóki nie rozważysz próby zrobienia tego w środowisku rozproszonym lub współbieżnym. Musisz teraz poradzić sobie z wszelkimi problemami związanymi z terminami i prawdopodobnie stworzysz poważne wąskie gardło, które spowalnia rzeczy znacznie bardziej niż ponowne obliczanie.
Rezultatem jest to, że podejście „napraw wszystko” lub „odśwież wszystko” jest znacznie łatwiejsze do zrobienia. Możesz zastosować bardziej wyrafinowane podejście, ale jest ono o wiele bardziej skomplikowane i dlatego jest bardziej podatne na błędy. Ponadto w wielu kontekstach podejście „odśwież wszystko” może być bardziej wydajne. Na przykład podejścia do kopiowania przy zapisie są zwykle wolniejsze w przypadku podejść jednowątkowych, ale gdy masz wysoką współbieżność, pozwala to uniknąć blokad, a tym samym zapewnić lepszą wydajność. W innych przypadkach może to umożliwić grupowanie zmian w efektywny sposób. Dlatego w przypadku większości problemów prawdopodobnie chcesz zacząć od odświeżenia wszystkiego, chyba że masz konkretny powód, dla którego nie możesz tego zrobić, a następnie martwisz się zrobieniem czegoś bardziej złożonego, gdy zajdzie taka potrzeba.