Модель
Под моделью приложения в целом подразумевается его состояние и API для изменения этого состояния. При использовании эффектора (в отличие от redux) модель является децентрализованной. Каждый отдельный "кусочек" модели представляет собой набор условно независимых (от остального приложения), связанных друг с другом данных (effector.Store
), событий (effector.Event
) и эффектов(effector.Effect
). В дальнейшем каждый такой "кусочек" мы тоже будем называть словом "модель".
Часть данных и событий экспортируется во внешний мир (и может быть использована другой моделью), часть является приватной и используется только внутри данной модели. Отдельные модели могут связываться друг с другом и взаимодействовать (но только через публичное API).
Мы рекомендуем использовать домены и упаковывать каждую отдельную модель в домен. Это делает объявление сторов и эффектов более изящным, уменьшая количество импортов, упрощает тестирование, позволяет одномоментно навешивать некоторое событие на все сторы данной модели, используя хуки доменов (это актуально для события reset
), а также упрощает внедрение server side rendering, если он, не дай бог, понадобится в будущем.
С целью упрощения тестирования рекомендуется помещать все домены моделей в единый на все приложение корневой домен. Такой подход значительно упрощает тестирование: достаточно сделать fork
корневого домена, чтобы получить чистый, независимый скоуп состояния приложения, не беспокоясь о сайд-эффектах при тестировании.