Size: a a a

Atomic Design && Feature Slices

2021 February 24

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
Почему не изучить подход, не разобраться в его особенностях, какие задачи и как он решает, поглядеть на трейдоффы, и уже потом решать?
Если уж методология закрывает потребности большинства проектов, буквально, какая вдруг такая ситуация, что ваш проект не входит в это большинство? А если не входит, то кто в этом виноват почему?
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
Бизнес так решил? Да ему плевать в какой методологии написан проект.
Тимлид/Архитектор? Да, он самый. Вот к нему и вопросы, почему конкретная методология не подходит. И по идее у бизнеса должны быть огромные вопросы к такому архитектору. Почему он решил тратить деньги бизнеса на разработку своей методологии, усложнение найма и обучение сотрудников, а не использование готовой методологии и реализацию фич.
источник

SS

S S in Atomic Design && Feature Slices
В форме оплате есть прием и вывод, они будут в папке как features/payment/payin и features/payment/payout правильно?
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
S S
В форме оплате есть прием и вывод, они будут в папке как features/payment/payin и features/payment/payout правильно?
а зачем отдельные фичи.
это ж может быть просто на страницах
источник

SS

S S in Atomic Design && Feature Slices
createStore<🦉> ⁣
а зачем отдельные фичи.
это ж может быть просто на страницах
нужно на одной странице, в которой по payment_type рисуется прием или вывод
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
S S
нужно на одной странице, в которой по payment_type рисуется прием или вывод
я бы не выделял это в фичу без необходимости реюза или если бы не было много кода
источник

SS

S S in Atomic Design && Feature Slices
createStore<🦉> ⁣
я бы не выделял это в фичу без необходимости реюза или если бы не было много кода
а как правильно поступить в этой ситуации?
источник

AS

Arthur Saenz in Atomic Design && Feature Slices
createStore<🦉> ⁣
я бы не выделял это в фичу без необходимости реюза или если бы не было много кода
у тебя получается ограничиваться только двумя файликами model and page в папках страниц?
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
Arthur Saenz
у тебя получается ограничиваться только двумя файликами model and page в папках страниц?
ага
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
всё что можно вынести и не потерять в детализации бизнес логики
я выношу.
Что это значит?

Например, страница занимается оплатой, значит всякие детали вычисления можно убрать из страницы в shared модуль или в lib. При этом нужно убрать так, чтобы туда не утекла бизнес логика, и тот модуль можно было при желании переюзать в другой логике.
источник

AS

Arthur Saenz in Atomic Design && Feature Slices
createStore<🦉> ⁣
всё что можно вынести и не потерять в детализации бизнес логики
я выношу.
Что это значит?

Например, страница занимается оплатой, значит всякие детали вычисления можно убрать из страницы в shared модуль или в lib. При этом нужно убрать так, чтобы туда не утекла бизнес логика, и тот модуль можно было при желании переюзать в другой логике.
Значит features/* это синглтон?
источник

AS

Arthur Saenz in Atomic Design && Feature Slices
Что-то про shared я впервые слышу в feature slice.
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
Arthur Saenz
Значит features/* это синглтон?
да. может им быть
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
Arthur Saenz
Что-то про shared я впервые слышу в feature slice.
я ж говорю, что в процессе исследования и разработки проектов выяснилось, что многие вещи не работают в featureslices как хотелось бы.
источник

AS

Arthur Saenz in Atomic Design && Feature Slices
значит как только тебе надо использовать BL двух отдаленных местах, это сразу переноситься в shared. круто!
источник

AS

Arthur Saenz in Atomic Design && Feature Slices
createStore<🦉> ⁣
я ж говорю, что в процессе исследования и разработки проектов выяснилось, что многие вещи не работают в featureslices как хотелось бы.
это классно, что присутствуют  движение  в эволюции.
источник

AS

Arthur Saenz in Atomic Design && Feature Slices
@sovasergey ты нигде централизовано не разшариваешь свои инсайты? только тут в чатике?
источник

SS

S S in Atomic Design && Feature Slices
Arthur Saenz
@sovasergey ты нигде централизовано не разшариваешь свои инсайты? только тут в чатике?
в инсте
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
- api
- features
- lib
- pages
- processes
- shared
- ui


Стало понятно, что нужена директори shared.
Там лежит все что связано с одной сущностью, но не прибито к бизнес логике: компоненты, валидаторы, кеши, хуки, и т.д.

в features лежат маленькие бизнес кейсы без вьюхи, только логика.
blog-post-creation, user-registration
Страница может композироваться из фич и шаред модулей.

в processes лежат большие процессы, которые сидят сверху над всеми страницами. Как саги, форкаются при старте приложения и следят за жизненными циклами. Например, процесс оплаты требует 3 страниц и должен проверять может ли пользователь перейти к следующей странице, сохранена и активна ли сессия и т.д.

Все эти сущности нужны для упрощения восприятия и модификации проекта, но требуют времени на освоение.

Я думаю никому не хочется, чтобы всё приложение было опасным для изменений(при модификации может сломаться что угодно и заранее невозможно предсказать что именно).

Каждая такая секция раскладывает код по сложности изменений и по опасности.
Если отсортировать их по сложности изменения, то получится такой список, самый первый самый простой для изменений, последний наисложнейший:
1. ui, lib
2. shared
3. features
4. pages
5. processes

А если отсортировать по опасности изменений, то получится ровно обратный список.
Первыми будут процессы, потому что от них никто не зависит и модификация процесса может сломать только процесс. А вот модификация страниц может сломать процесс, но только его.
Но при этом при изменении ui или lib, стоит быть максимально осторожным, потому что они используются во всем проекте.

Собственно эти списки показывают какие усилия требуется сосредоточить в каждой части кода. Например, становится очевидно, что ui и lib должны быть максимально покрыты unit-тестами и документацией. А процессы и страницы должны быть покрыты e2e тестами, чтобы правильно выполнять сценарии бизнес-логики.

Также внезапно становится очевидно, как погружать новичков в архитектуру проекта и взаимосвязи: нужно выдавать задачи пытаясь идти по списку выше, от модификации и создания ui и lib, предлагая напороться на сложность их переиспользования, а дальше постепенно увеличивая бизнес-ценность переходя от shared к features и страницам с процессами, при этом разработчик будет знать как устроен проект снизу.
источник

c⁣

createStore<🦉>... in Atomic Design && Feature Slices
Arthur Saenz
@sovasergey ты нигде централизовано не разшариваешь свои инсайты? только тут в чатике?
источник