Я думаю, що стаття трохи датована, тому що, як я читав, це насправді не є неортодоксальною чи новою ідеєю. Ця ідея подається як окремий зразок, коли вона справді є простою реалізацією спостерігача. Роздумуючи над тим, що я робив у той час, я пам’ятаю, що працював над логікою, щоб сидіти за дещо складним інтерфейсом із низкою різних панелей із взаємозалежними даними. Користувач може змінити значення та / або запустити процедуру оптимізації, і на основі цих дій були створені події, які інтерфейс користувача прослухав би та оновив за потреби. Під час розробки виникла низка питань, де певні панелі не оновлювались, коли слід. Виправлення (перебування в дизайні) полягало в генеруванні подій з інших подій. Зрештою, до того часу, як все працювало правильно, майже кожна зміна призвела до оновлення всіх панелей. Вся складність спроби ізолювати, коли дану панель потрібно оновити, була нанівець. І це все одно не мало значення. Це була фактично передчасна оптимізація. Я б заощадив багато часу і сил, просто зібравши все це в одну подію, яка все оновила.
Існує незліченна кількість систем, розроблених в режимі "виправити все" або оновити все. Подумайте про всі інтерфейси CRUD, які додають / оновлюють рядок, а потім запитують БД. Це не екзотичний підхід, це лише очевидне нерозумне рішення. Ви повинні усвідомити, що в 2003 році це був розпал «зразкової лихоманки». З того, що я міг сказати, люди думали, що називання нових зразків стане їхнім шляхом до слави та багатства. Не зрозумійте мене неправильно, я думаю, що концепція візерунка є надзвичайно корисною для опису рішень у рефераті. Речі просто трохи пішли з рейок. Це прикро, оскільки це створило багато цинізму щодо концепції візерунка загалом. Лише в цьому контексті є сенс говорити про це як про "неортодоксальне" рішення. Це ' s подібний до ортодоксальності навколо контейнерів ORM або DI. Не використовувати їх розглядають як неортодоксальні, хоча люди розробляли програмне забезпечення задовго до того, як ці інструменти існували, і в багатьох випадках ці інструменти є надмірними.
Тож назад до "все виправити". Простий приклад - обчислення засобів. Просте рішення - підсумовувати числа і ділити на кардинальність значень. Якщо ви додасте чи зміните число, ви просто зробите це ще раз, з початку. Ви можете відслідковувати суму та кількість підрахунків чисел, і коли хтось додає число, ви збільшуєте кількість та додаєте її до суми. Тепер ви знову не додаєте всі номери. Якщо ви коли-небудь працювали з Excel з формулою, яка посилається на діапазон і змінила одне значення в цьому діапазоні, у вас є приклад шаблону "виправити все", тобто будь-яка формула, яка має посилання на цей діапазон, буде перерахувати незалежно від того це значення було релевантним (наприклад, використовуючи щось на кшталт sumif ()).
Це не означає, що це не розумний вибір у даному контексті. У середньому прикладі скажемо, що зараз нам потрібно підтримувати оновлення. Тепер мені потрібно якось знати старе значення і лише змінити суму на дельту. Ніщо з цього насправді не таке складне, поки ви не спробуєте зробити це в розподіленому або одночасному середовищі. Тепер вам доведеться вирішувати всі види тернистих проблем з тимчасовим терміном, і ви, ймовірно, в кінцевому підсумку створите велике вузьке місце, яке сповільнить речі набагато більше, ніж перерахунок.
Підсумок тут полягає в тому, що підхід «виправити все» або «оновити все» набагато простіше вийти правильно. Можна зробити більш складний підхід до роботи, але це набагато складніше і, отже, більше шансів на помилку. Крім того, у багатьох контекстах підхід «оновити все» може бути більш ефективним. Наприклад, підходи до копіювання при записі, як правило, повільніші для однопотокових підходів, але коли у вас є велика одночасність, це дозволяє вам уникнути блокування і, таким чином, забезпечити кращу ефективність. В інших випадках це може дозволяти ефективно збирати зміни разом. Тож для більшості проблем ви, мабуть, хочете почати з підходу до оновлення всього, якщо у вас немає конкретної причини, чому ви не можете цього зробити, а потім переймаєтесь тим, що зробите щось складніше, коли у вас виникне потреба.