From cba311d78e198ca34bf85d6266e6f47379c36c9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=93=D1=80=D0=BE?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2?= Date: Fri, 3 Apr 2026 19:54:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 122 insertions(+), 13 deletions(-) diff --git a/notes b/notes index 36abd35..14a7c9d 100644 --- a/notes +++ b/notes @@ -4,16 +4,125 @@ Проблема, неочевидность слоев (наследие FSD) - Нет четкого понимания что виджет - это собраные переиспользуемые блоки на всех раздела сайта (пример: слайдеры, итд..) - - Честный ответ — из style guide это неочевидно. Вот что там написано про слои: -- shared/ui — переиспользуемые UI-компоненты без бизнес-логики -- widgets — самодостаточные блоки интерфейса -- screens — экраны, собирают виджеты -Но нет чёткого правила: "если компонент используется только на одной странице — он дочерний компонент screen, а не widget". Style guide описывает что такое каждый слой, но не описывает критерий выбора между ними. -Я по умолчанию положил всё в widgets/ потому что style guide говорит "screen собирается из виджетов" — и я буквально так и сделал. Это ошибка интерпретации. -Что стоит дополнить в style guide -Критерий размещения: -Переиспользуется на 2+ страницах? -├── Да → shared/ui (компонент) или widgets/ (составной блок) -└── Нет → screens/{name}/ui/ (дочерний компонент экрана) \ No newline at end of file + +Архитектурные слои проекта +Каждый нижний слой не знает о существовании верхних. Импорты идут только сверху вниз. +pages → layouts → screens → widgets → features → entities → shared +--- +1. Pages (pages/) +Точка входа маршрута. Только связывает layout и screen. +Правила: +- Никакой логики, стилей, разметки кроме композиции +- Один page = один layout + один screen +Пример: +// pages/knv-new.js +import { KnvScreen } from 'src/screens/knv' +import { MainLayout } from 'src/layouts/main' +const KnvNewPage = () => ( + + + +) +--- +2. Layouts (src/layouts/) +Каркас страницы — общие элементы, которые одинаковы на всех страницах в рамках этого layout. +Содержит в ui/: header, footer, sidebar — дочерние компоненты, которые привязаны к layout и не переиспользуются отдельно. +Критерий: компонент одинаков на всех страницах, использующих этот layout? → layouts/{name}/ui/ +Пример: +src/layouts/main/ +├── main.layout.tsx #
+ children +