Завершила третий проект. Начала я его 19 июля, 1 августа отправила на первую проверку, и 22 августа спустя 6 проверок ментор принял проект.
Было даже сложнее, чем с предыдущим. Но не менее увлекательно и полезно. Улучшила свои навыки работы с вебпаком, бутстрапом, попрактиковала watchjs и немного освоила автоматы (для этого даже начала читать сответствующую книгу). Кроме того, разобралась как работают кастомные события на нативном JS, иначе неловко было пользоваться jquery, не зная, как оно внутри устроено.
Основной сложностью здесь была архитектура и автоматы. Я начала писать проект на классах, потому что в бойлерплейте лежали они. Сначала у меня был один большой класс, потом я попыталась выделить несколько отдельных классов. Но классы не получались, получился набор рандомных методов. Пришлось переписывать на функции.
И вроде бы я знала, что функции нужно писать по возможности чистыми, но в начале у меня вышло так, что каждая функция мутировала стейт.
Я вроде бы помнила, что такое MVC, и какой слой за что должен отвечать. Однако всё равно продолжала путаться, пока не выделила для себя следующие правила: 1) вотчеры должны только перестраивать DOM и не изменять стейт, 2) листенеры должны только изменять стейт и не перестраивать DOM.
Пока у тебя немного опыта, сложно понимать, где у тебя хак-костыль или излишний код, а где — подходящий приём программирования. Иногда эти понятия путаются.
Поэтому после того, как тебе говорят, что не выделены абстракции, ты начинаешь разбивать функцию на множество мелких абстракций до такой степени, что разобраться в коде становится невозможно. Хотя ты этого не видишь, а думаешь, что сделал всё правильно. Очень трудно прочувствовать эту грань.
Или когда ты въезжаешь в концепцию MVC, и начинаешь переписывать встроенные функции бутстрапа так, чтобы DOM перестраивался через вотчеры, а на стандартные события навешиваешь изменение состояния, но потом оказывается, что так делать не нужно, и нужно пользоваться готовыми абстракциями библиотеки.
Если на втором проекте приходилось больше голову ломать над тем, чтобы хоть как-нибудь добиться нужного результата, после чего комментарии ментора давали однозначное понимание, куда двигаться дальше. Здесь же добиться требуемого результата не так уж сложно, но очень сложно сделать это правильно. Для этого приходилось часто задавать вопросы Кириллу, иначе сложно было двигаться вперёд. А над полученными ответами нужно было подолгу размышлять, чтобы уловить суть.
Кириллу — великая благодарность.
Теперь сегодня я попробую выспаться (утопия), а с завтрашнего дня — приступаю к четвёртому долгожданному проекту.