Skip to content

Latest commit

 

History

History
167 lines (117 loc) · 8.45 KB

File metadata and controls

167 lines (117 loc) · 8.45 KB
sidebar_position 1
pagination_next get-started/index

🔎 Введение

OVERVIEW-ORIENTED

feature-sliced-banner

FeatureSliced - это методология для проектирования frontend проектов. Она нацелена на на разделение приложения согласно бизнес-логике и областям ответственности.

:::note Методология не привязана к конкретному стеку и применима к любым фронтенд-проектам в целом.

Но текущая версия приводит примеры и проработана на базе связки JavaScript + React :::

Основы

schema-themed--scheme

Больше подробностей: "Концепции, Абстракции, Структура"

Мотивация

Обычно, подходы построения архитектуры фронтенда от проекта к проекту переизобретаются с нуля, пополняя тем самым "проектные знания"

Несмотря на то, что специфика фронтенд-проектов отличается не так значительно

При этом, неверно принятые решения зачастую приводят к проблемам масштабируемости проекта и команды.

И поэтому, вместо того, чтобы придумывать и документировать это каждый раз, хочется обобщить опыт и сформировать рабочую, проверенную и задокументированную методологию для проектирования архитектуры фронтенда.

Да, практик и паттернов много (SOLID, GRASP, DDD, ...)

Но для фронтенда крайне трудно найти устоявшиеся и конкретные подходы

Обзор

Методология призвана упростить и стандартизировать декомпозицию логики для больших и долгоживущих проектов.

Для этого она вводит ряд концепций и абстракций, на которых может базироваться архитектура от проекта к проекту - отсюда получаем ряд преимуществ

:::info

Модуль - структурная единица проекта (файл / директория)

:::

Явная бизнес-логика

Модули распределяются согласно скоупу влияния, бизнес-ответственности и техническому назначению

Благодаря этому архитектура стандартизируется и становится более простой для ознакомления

Адаптация к новым условиям

Каждый компонент архитектуры имеет свое назначение и не влияет на другие

Благодаря этому под новые требования можно независимо модифицировать функциональность приложения без непредвиденных последствий

Техдолг и рефакторинг

Каждый модуль является независимым и самодостаточным

Благодаря этому можно переписать его с нуля без неожиданных сайд-эффектов

Масштабирование проекта и команды

Увеличение функциональности ведет к значительно меньшему усложнению проекта, т.к. вся логика распределена детерминированно и изолированно

Благодаря этому легко добавлять и онбордить новых людей в команду, а также расширять функциональность проекта

Контролируемое переиспользование логики

Каждый модуль имеет свои ограничения и рекоммендации на переиспользуемость согласно своему слою

Благодаря этому сохраняется баланс между соблюдением принципа DRY и возможности кастомизировать логику модуля без оверхедных переопределений

Что дальше?

import Row from "@site/src/shared/ui/row/tmpl.mdx" import { RocketOutlined, ThunderboltOutlined, FundViewOutlined } from "@ant-design/icons"; import Link from "@docusaurus/Link";

<Row title="Быстрый старт" description="Быстрое погружение в методологию" to="/docs/get-started" Icon={"🚀"} tags={['Основы','Быстрый старт','Мотивация']} /> <Row title="Гайды" description="Практические гайды и примеры по применению Feature Sliced" to="/docs/guides" Icon={"🎯"} tags={['v1','Легаси','Примеры']} /> <Row title="Концепции" description="Ключевые концепции для более эффективного понимания и применения" to="/docs/concepts" Icon={"🧩"} tags={['Декомпозиция','Изоляция','Public API']} /> <Row title="Справочник" description="Справочная информация по ключевым понятиям" to="/docs/reference" Icon={"📚"} tags={['Глоссарий','Слои','Сегменты']} /> <Row title="О методологии" description="Философия методологии, ее цели и место в современном фронтенде" to="/docs/about" Icon={"🍰"} tags={['Миссия','Продвижение & Интеграция']} /> <Row title="Community" description="Комьюнити-ресурсы и дополнительные материалы" to="/docs/community" Icon={"💫"} tags={['Awesome','Команда', 'Контрибьютинг']} /> <Row title="Примеры" description="Примеры проектов, спроектированных с Feature Sliced" to="/examples" Icon={"🛠"} />