|
27 | 27 | ## Overview
|
28 | 28 | `feature-sliced` - структурная методология для JavaScript фронтенд проектов
|
29 | 29 |
|
30 |
| -Главная идея - разделить логику приложения не по типам, **а по функциональности приложения, т.е. согласно бизнес-ценностям** |
31 |
| -> См. также `separation of concerns` |
| 30 | +Основные идеи: |
| 31 | +- разделить логику приложения не по типам, **а по функциональности приложения, т.е. согласно бизнес-ценностям** |
| 32 | + > См. также `separation of concerns`, `vertical-slices`, `feature-based` |
| 33 | +- **группировать слайсы БЛ** по слоям и скоупу влияния |
| 34 | + > `app` > `*processes` > `pages` > `features` > `entities` > `shared` |
32 | 35 |
|
33 | 36 | <!-- > TODO: будет дополняться позже -->
|
34 | 37 |
|
35 | 38 | ## Структура
|
36 | 39 |
|
37 |
| -Пока что пришли примерно к такому варианту |
38 |
| -> Но т.к. все еще [ведутся жаркие дискуссии](https://github.com/feature-sliced/wiki/discussions) - вариант неокончательный, хоть и составлен путем объединения разных опытов |
| 40 | +> См. также ["Абстракции методологии"](./intro/abstractions.md) и ["Разбиение приложения"](./concepts/app-splitting.md) |
39 | 41 |
|
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 |
86 | 43 |
|
87 |
| -<details> |
88 |
| - <summary>/features/</summary> |
89 |
| - |
90 | 44 | ```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/ # |
128 | 82 | ```
|
129 |
| - |
130 |
| -</details> |
131 | 83 |
|
132 | 84 | ## P.S. **Это не "серебряная пуля"**
|
133 | 85 | Не так много примеров проектов, которые полностью следуют правилам и принципам методологии, с сохранением преимуществ
|
|
144 | 96 | - [О методологии](./about/readme.md)
|
145 | 97 | - [Об архитектуре](./about/architecture.md)
|
146 | 98 | - [Об истории методологии](./about/history.md)
|
| 99 | +- `NEW:` `HOT:` [Про абстракции методологии](./intro/abstractions.md) |
147 | 100 | - `NEW:` [О мотивации создания методологии](./about/motivation.md)
|
148 | 101 | - `NEW:` [О понимании потребностей и формулировке задач](./concepts/understanding-needs.md)
|
149 | 102 | - [Дискуссии по методологии](https://github.com/feature-sliced/wiki/discussions)
|
|
0 commit comments