Skip to content

Commit 3063f24

Browse files
authored
Merge pull request #87 from feature-sliced/feature/abstractions
Добавил доку по "Абстракциям методологии"
2 parents a2a89a2 + 27235fa commit 3063f24

File tree

2 files changed

+270
-92
lines changed

2 files changed

+270
-92
lines changed

README.md

Lines changed: 45 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -27,107 +27,59 @@
2727
## Overview
2828
`feature-sliced` - структурная методология для JavaScript фронтенд проектов
2929

30-
Главная идея - разделить логику приложения не по типам, **а по функциональности приложения, т.е. согласно бизнес-ценностям**
31-
> См. также `separation of concerns`
30+
Основные идеи:
31+
- разделить логику приложения не по типам, **а по функциональности приложения, т.е. согласно бизнес-ценностям**
32+
> См. также `separation of concerns`, `vertical-slices`, `feature-based`
33+
- **группировать слайсы БЛ** по слоям и скоупу влияния
34+
> `app` > `*processes` > `pages` > `features` > `entities` > `shared`
3235
3336
<!-- > TODO: будет дополняться позже -->
3437

3538
## Структура
3639

37-
Пока что пришли примерно к такому варианту
38-
> Но т.к. все еще [ведутся жаркие дискуссии](https://github.com/feature-sliced/wiki/discussions) - вариант неокончательный, хоть и составлен путем объединения разных опытов
40+
> См. также ["Абстракции методологии"](./intro/abstractions.md) и ["Разбиение приложения"](./concepts/app-splitting.md)
3941
40-
```bash
41-
└── src/
42-
├── app/ # Инициализирующая логика приложения
43-
├── processes/ # Процессы приложения, протекающие "над страницами"
44-
├── pages/ # Страницы приложения
45-
├── features/ # Ключевой функционал приложения (разбитый по фичам)
46-
├── entities/ # Сущности
47-
├── shared/ # Переиспользуемые модули
48-
└── index.tsx/ # Энтрипоинт приложения
49-
```
50-
51-
52-
<details>
53-
<summary>/app/</summary>
54-
55-
```sh
56-
└── app/
57-
├── store/ # Инициализация store
58-
├── styles/ # Инициализация styles
59-
├── hocs/ # Инициализирующая логика (HOC-обертки)
60-
├── {...} #
61-
```
62-
63-
</details>
64-
65-
<details>
66-
<summary>/processes/</summary>
67-
68-
`TODO:` Позже будет дополнено
69-
70-
```sh
71-
└── processes/
72-
```
73-
74-
</details>
75-
76-
<details>
77-
<summary>/pages/</summary>
78-
79-
```sh
80-
└── pages/
81-
├── {page}/ # Ресурсы страницы (с минимальной логикой)
82-
└── index.tsx # Энтрипоинт (чаще всего с composed роутингом)
83-
```
84-
85-
</details>
42+
> `WIP:` Нейминг групп временный, и будет определен окончательно ближе к релизу MVP
8643
87-
<details>
88-
<summary>/features/</summary>
89-
9044
```sh
91-
└── features/ # Фичи приложения
92-
── feature-name/ # Обычно содержит в себе:
93-
├── components/ # UI-компоненты фичи
94-
├── {store/} # *Store фичи
95-
├── {models/} # *Модели фичи
96-
├── {...}/ #
97-
└── index.ts # Энтрипоинт фичи (с ее публичным API)
98-
```
99-
100-
</details>
101-
102-
<details>
103-
<summary>/entities/</summary>
104-
105-
```sh
106-
└── entities/ # Сущности
107-
├── user/ # Обычно содержит в себе (по необходимости):
108-
| ├── components/ # *Подкомпоненты
109-
| ├── lib/ # *Библиотеки
110-
| ├── api/ # *Мб Подзапросы
111-
| └── store/ # *Зашаренный Стейт
112-
├── {entity-1} #
113-
├── {entity-2} #
114-
── {...}/ #
115-
```
116-
117-
</details>
118-
119-
<details>
120-
<summary>/shared/</summary>
121-
122-
```sh
123-
── shared/ # Переиспользуемые модули
124-
── ui/ # *UIKit приложения
125-
├── lib/ # *Библиотеки приложения (вместо свалки хелперов)
126-
├── api/ # *API-инстансы/методы
127-
└── {...} #
45+
└── src/
46+
── app/ # Layer: Приложение
47+
| #
48+
├── processes/ # Layer: Процессы (опционален)
49+
| ├── {some-process}/ # Slice: (н-р процесс CartPayment)
50+
| | ├── lib/ # Segment: Инфраструктурная-логика (хелперы)
51+
| | └── model/ # Segment: Бизнес-логика
52+
| ... #
53+
| #
54+
├── pages/ # Layer: Страницы
55+
| ├── {some-page}/ # Slice: (н-р страница ProfilePage)
56+
| | ├── lib/ # Segment: Инфраструктурная-логика (хелперы)
57+
| | ├── model/ # Segment: Бизнес-логика
58+
| | └── ui/ # Segment: UI-логика
59+
| ... #
60+
| #
61+
├── features/ # Layer: Фичи
62+
| ├── {some-feature}/ # Slice: (н-р фича AuthByPhone)
63+
| | ├── lib/ # Segment: Инфраструктурная-логика (хелперы)
64+
| | ├── model/ # Segment: Бизнес-логика
65+
| | └── ui/ # Segment: UI-логика
66+
| ... #
67+
| #
68+
── entities/ # Layer: Бизнес-сущности
69+
| ├── {some-entity}/ # Slice: (н-р сущность User)
70+
| | ├── lib/ # Segment: Инфраструктурная-логика (хелперы)
71+
| | ├── model/ # Segment: Бизнес-логика
72+
| | └── ui/ # Segment: UI-логика
73+
| ... #
74+
| #
75+
├── shared/ # Layer: Переиспользуемые ресурсы
76+
| ├── api/ # Segment: Логика запросов к API
77+
|── lib/ # Segment: Инфраструктурная-логика (хелперы)
78+
|── ui/ # Segment: UI-логика
79+
| ... #
80+
| #
81+
└── index.tsx/ #
12882
```
129-
130-
</details>
13183

13284
## P.S. **Это не "серебряная пуля"**
13385
Не так много примеров проектов, которые полностью следуют правилам и принципам методологии, с сохранением преимуществ
@@ -144,6 +96,7 @@
14496
- [О методологии](./about/readme.md)
14597
- [Об архитектуре](./about/architecture.md)
14698
- [Об истории методологии](./about/history.md)
99+
- `NEW:` `HOT:` [Про абстракции методологии](./intro/abstractions.md)
147100
- `NEW:` [О мотивации создания методологии](./about/motivation.md)
148101
- `NEW:` [О понимании потребностей и формулировке задач](./concepts/understanding-needs.md)
149102
- [Дискуссии по методологии](https://github.com/feature-sliced/wiki/discussions)

0 commit comments

Comments
 (0)