|
1 | 1 | [src-disc]: https://github.com/feature-sliced/wiki/discussions/31
|
2 | 2 | [disc-poll]: https://github.com/feature-sliced/wiki/discussions/31#discussioncomment-464894
|
| 3 | +[disc-list]: https://github.com/feature-sliced/wiki/discussions/ |
3 | 4 | [disc-processes]: https://github.com/feature-sliced/wiki/discussions/20
|
4 | 5 | [disc-model]: https://github.com/feature-sliced/wiki/discussions/68
|
5 | 6 | [tg-description]: https://t.me/atomicdesign/18951
|
|
168 | 169 | > *До этого - надо определится со скоупом влияния (слайсом) и доменом*
|
169 | 170 |
|
170 | 171 | ```sh
|
171 |
| -├── {domain}/ |
172 |
| -| ├── ui/ # UI-логика (components, ui-widgets, ...) |
173 |
| -| ├── model/ # Бизнес-логика (store, actions, effects, reducers, ...) |
174 |
| -| ├── lib/ # Инфраструктурная логика (utils/helpers) |
175 |
| -| └── api/ # Логика запросов к API (api instances, requests, ...) |
| 172 | +{slice}/ |
| 173 | + ├── {domain}/ |
| 174 | + | ├── ui/ # UI-логика (components, ui-widgets, ...) |
| 175 | + | ├── model/ # Бизнес-логика (store, actions, effects, reducers, ...) |
| 176 | + | ├── lib/ # Инфраструктурная логика (utils/helpers) |
| 177 | + | └── api/ # Логика запросов к API (api instances, requests, ...) |
176 | 178 | ```
|
177 | 179 |
|
| 180 | +<details> |
| 181 | +<summary>Про разрешенные типы для слайсов</summary> |
| 182 | + |
| 183 | +Конечно, хочется, чтобы **любой из перечисленных выше типов** можно было положить внутри домена **любого слайса** |
| 184 | + |
| 185 | +Однако [опыт и дискуссии][disc-list] показали, что лучше и логичнее ограничить каждый слайс на используемые внутри типы |
| 186 | + |
| 187 | +**Общие правила:** |
| 188 | +- (\*) Чем выше расположен слайс - тем больше он знает про БЛ приложения и наоборот |
| 189 | +- (\*\*) API логику *рекомендуется* класть в `shared`, чтобы не распылялась по проекту |
| 190 | + > Как правило - она общая и представлена в виде единых инстансов |
| 191 | + > |
| 192 | + > **Edge-cases**: *GraphQL*, *react-query hooks* |
| 193 | +
|
| 194 | +**Для конкретных слайсов:** |
| 195 | +1. `app`: Обычно не включает в себя домены и содержит логику инициализации |
| 196 | + > Имеющиеся типы не совсем подходят, а потому используются обычно `/hocs`, `/styles` и т.д. |
| 197 | + > |
| 198 | + > Очень зависит от проекта и вряд ли решается методологией |
| 199 | +2. `processes`: Обычно домены внутри включают в себя только бизнес-логику, без отображения (\*) |
| 200 | + > Разрешенные типы: `lib`, `model`, `**api` |
| 201 | +3. `pages`: Обычно домены внутри включают в себя ui- и model- композицию различных фичей для конкретной страницы |
| 202 | + > Разрешенные типы: `ui`, `lib`, `model`, `**api` |
| 203 | +4. `features`: Обычно домены внутри включают в себя композицию сущностей и реализацию БЛ в модели + отображение |
| 204 | + > Разрешенные типы: `ui`, `lib`, `model`, `**api` |
| 205 | +5. `entities`: Обычно домены внутри представляют разрозненный набор подмодулей для использования |
| 206 | + > Разрешенные типы: `ui`, `lib`, `model`, `**api` |
| 207 | +6. `shared`: Обычно содержат только инфраструктурную логику без БЛ \*) |
| 208 | + > Разрешенные типы: `ui`, `lib`, `api` |
| 209 | +
|
| 210 | +</details> |
| 211 | + |
178 | 212 | ## 📑 См. также
|
179 | 213 | - [Обсуждение **"Абстракции методологии, их цели и нейминг"**][src-disc]
|
180 | 214 | - **Обсуждения по неймингу сущностей**
|
|
0 commit comments