Skip to content

Commit bee65c6

Browse files
committed
feat(abstractions): add info about allowed types in slices
#61
1 parent 8d6fc8c commit bee65c6

File tree

1 file changed

+39
-5
lines changed

1 file changed

+39
-5
lines changed

intro/abstractions.md

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[src-disc]: https://github.com/feature-sliced/wiki/discussions/31
22
[disc-poll]: https://github.com/feature-sliced/wiki/discussions/31#discussioncomment-464894
3+
[disc-list]: https://github.com/feature-sliced/wiki/discussions/
34
[disc-processes]: https://github.com/feature-sliced/wiki/discussions/20
45
[disc-model]: https://github.com/feature-sliced/wiki/discussions/68
56
[tg-description]: https://t.me/atomicdesign/18951
@@ -168,13 +169,46 @@
168169
> *До этого - надо определится со скоупом влияния (слайсом) и доменом*
169170
170171
```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, ...)
176178
```
177179

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+
178212
## 📑 См. также
179213
- [Обсуждение **"Абстракции методологии, их цели и нейминг"**][src-disc]
180214
- **Обсуждения по неймингу сущностей**

0 commit comments

Comments
 (0)