fullstack-development / react-redux-starter-kit

Modular starter kit for React+Redux+React Router projects.

Home Page:https://demo.fullstack-development.com/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Выпилить FeatureConnector. Заменить на фабрику фич

sk1e opened this issue · comments

Недостатки в слое по работе с фичами на данный момент:

  • передача ответственности за мультинстанс функциональность размыта между составляющими фичи: контейнерами, редьюсерами, сагами, когда это куда более органично будет находиться в слое по инициализации фичи, где всё где такую функциональность можно добавить автоматически, упростив API до одной передачи ID инстанса;
  • нечитаемые ID инстансов фичи. Из структуры стейта мультиинстанс фич непонятно какой инстанс за что отвечает, когда мы вполне можем предоставить полезное описание из местонахождения или предназначения инстанса, например, «order-list-from-main-page» и «order-list-from-new-order-modal»;
  • невозможно связать стейт нескольких контейнеров одной фичи в рамках одного инстанса этой фичи;
  • невозможно загрузить индивидуальную фичу. Текущее API даёт возможность загрузить только связку фич;
  • невозможно показать вёрстку модуля до загрузки фич;
  • невозможно показать прелоадер до загрузки индивидуальной фичи;
  • невозможно параметризовать фичу. В данный момент она импортируется целиком, как модуль. Возможность определять у фичи аргументы открывает новые возможности и добавляет ей гибкости;
  • нет механизма деинициализации фичи. При демонтировании всех контейнеров фичи её стейт должен отсекаться от стейта приложения, а редьюсеры отсоединяться. Из-за этого появляется необходимость ручного сброса стейта и отрицательное влияние редьюсеров на производительность.

Предлагаю оформить асинхронную загрузку фич фабриками, где каждая фича предоставляет свою фабрику.

Фабрика принимает имя инстанса в человекочитаемом формате - строкой которая отражает расположение или область ответственности инстанса фичи.

Фабрика возвращает промис инстанса фичи.

Фабрика автоматически генерирует весь слой по загрузке фичи, по разрешению экшенов относительно редьюсеров своего инстанса.

Фабрика используется в компонентах модулях совместно со специальными реакт-хуками которые управляют стейтом загрузки инстанса.

Таким образом фабрика исправляет все недостатки, изложенные в начале.

Также предлагаю обсудить тут причины выпила предыдущей реализации мультиинстанс фичи. Какими критериями руководствовались?

Частично покрывает #76

мультиинстанс вынесли в отдельны репозиторий просто и должны были завернуть в npm пакет https://github.com/fullstack-development/redux-multi-connect

По поводу фабрики, я уже использовал похожий подход. дополнительно к FeatureConnector писал хелпер getAsyncContainer, который вызывал в индексе асинхронной фичи и там формировал асинхронные контейнеры. И получается везде где мы юзали асинхронные фичи, мы сразу забирали уже подготовленный AsyncContainer из самой фичи.

export const AsyncSomethingContainer = getAsyncContainer(loader, 'SomethingContainer');