Недавно я начал изучать фреймворк Angular2, и меня поразил подход Redux/@ngrx к управлению состоянием. Изучение Angular2 с помощью @ngrx создало благотворный цикл, в котором концепции одного подкрепляют другие. Мне казалось, что я постигаю оба фреймворка гораздо легче, чем если бы изучал их по отдельности.
Но даже с этим эффектом множителя обучения я знал, что мне придется написать несколько приложений, прежде чем я смогу даже заявить, что знаком с angular2 и ngrx, не говоря уже о мастере!
Кто не писал (или не копировал :-)) образец Todo при изучении нового языка или фреймворка?! Спешка, которую вы испытываете, когда приложение обретает форму, великолепна, и вы не хотите, чтобы пример / учебник когда-либо заканчивался! Вы думаете про себя… Как мне растянуть опыт? Как сделать *моё* приложение Todo самым плохим приложением Todo во всемирной паутине?? И вы продолжаете копаться в образце, пытаясь изучить новые (намного лучше, чем старые!) лучшие практики, спускаясь в кроличью нору результатов поиска Google.
Через пару часов учебник показал бы вам, как реализовать достаточно функциональное приложение Todo, в котором вы действительно можете создавать задачи!
И отменить/повторить свои задачи…
И сохраните задачи в удаленной базе данных…
И реализовывать автономные возможности…
И синхронизируйте свои задачи с несколькими устройствами/браузерами…
И…
Что?! Это не так? Кто бы это сделал!
Учебники (и примеры приложений) написаны, чтобы выделить определенные концепции языка/фреймворка. Писателю пришлось бы написать книгу (или серию), чтобы охватить все доступные или желаемые функции. Учащемуся придется потратить месяцы на практику, чтобы понять каждый сценарий и пограничный случай. И в конечном счете, чем полнее учебник, тем сложнее его понять.
Эти проблемы, вероятно, являются причиной того, что руководства по приложениям Todo склоняются в одном из трех направлений:
1. Реализовать базовые задачи (без сохраненного состояния)
2. Реализовать отмену/повтор (с локальным состоянием) — [пример]
3. Реализовать удаленное состояние (без отмены/повтора) — [пример]
Конечно, эти две задачи (управление состоянием и отмена/возврат) должны быть «ортогональными» — мы должны иметь возможность объединить две возможности
в одно приложение без каких-либо проблем. Нет!! Мои попытки совместить эти две функции явно не увенчались успехом.
Итак, вернемся к основным принципам и изучим все остальные концепции, которые я пропустил!