Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EDITING-423: Purge redundant links and reorder the content #432

Merged
merged 7 commits into from
Feb 13, 2022
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
sidebar_position: 1
---

# Базис
# Основы

:::caution Предупреждение

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ import Row from "@site/src/shared/ui/row/tmpl.mdx"
import { RocketOutlined, BuildOutlined, SettingOutlined } from "@ant-design/icons";

<Row
title="Базис"
description="Основы методологии (кратко)"
title="Основы"
description="Основные понятия методологии (кратко)"
to="/docs/get-started/basics"
Icon={SettingOutlined}
/>
Expand Down
81 changes: 25 additions & 56 deletions website/i18n/ru/docusaurus-plugin-content-docs/current/intro.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,52 +11,44 @@ pagination_next: get-started/index

**Feature Sliced Design** — это архитектурная методология для проектирования frontend-проектов. Она нацелена на разделение приложения согласно бизнес-логике и областям ответственности. Методология не привязана к конкретному стеку технологий и применима к любым frontend-проектам.

- Обеспечивает [**понятность, контролируемость и адаптивность**][refs-arch-req] архитектуры
- Основана на [**проверенных временем**][refs-motivation-why] практиках проектирования и концепциях
azinit marked this conversation as resolved.
Show resolved Hide resolved
- Обеспечивает **понятность, контролируемость и адаптивность** архитектуры
- Основана на **проверенных временем** практиках проектирования и концепциях
_SOLID, GRASP, DDD, Separation of Concerns, Vertical Slices, Public API, Isolation._
- Предлагает разделять проект согласно [**предметной области**][ext-ubiq-lang]
- Предлагает разделять проект по предметным областям

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

## Основы

![schema-themed--scheme](/img/visual_schema.jpg)

Термины, обозначенные на схеме, подробно описаны в разделе ["Концепции, Абстракции, Структура"][refs-basics].
azinit marked this conversation as resolved.
Show resolved Hide resolved
Термины, обозначенные на схеме, подробно описаны в разделе [**Abstractions**][refs-basics--abstractions].

## Мотивация

Обычно, подходы построения архитектуры фронтенда от проекта к проекту [переизобретаются с нуля][refs-motivation], пополняя тем самым ["проектные знания"][refs-knowledge]. При этом, неверно принятые решения зачастую приводят [к проблемам масштабируемости проекта и команды][refs-arch-problems]. Поэтому вместо того, чтобы придумывать и документировать это каждый раз, хочется **обобщить опыт и сформировать рабочую, проверенную и задокументированную методологию** для проектирования архитектуры фронтенда.
azinit marked this conversation as resolved.
Show resolved Hide resolved

## Преимущества

:::info

Здесь и далее, [**модуль**][refs-module] — структурная единица проекта (файл / директория).

:::
Подобная структура имеет ряд преимуществ:

Методология призвана упростить и стандартизировать декомпозицию логики для больших и долгоживущих проектов. Для этого она вводит ряд [концепций][refs-concepts] и [абстракций][refs-splitting], на которых может базироваться архитектура от проекта к проекту. Отсюда получаем ряд преимуществ:

- **Явная бизнес-логика**
Модули распределяются согласно [области влияния, бизнес-ответственности и техническому назначению][refs-splitting].
- **Единообразие**
Код распределяется согласно области влияния (слой), предметной области (слайс) и техническому назначению (сегмент).
Благодаря этому архитектура стандартизируется и становится более простой для ознакомления.

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

- **Техдолг и рефакторинг**
Каждый модуль является независимым и самодостаточным.
Благодаря этому можно переписать его с нуля без непредвиденных последствий в других частях проекта.
- **Устойчивость к изменениям и рефакторингу**
Один модуль не может использовать другой модуль, расположенный на том же слое или на слоях выше.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вынужденная мера, исключительно чтобы поскорей закрыть PR
(лучше до такого не доводить)

Если есть несогласие, то предлагаю на некст итерациях обсудить 🤔

А зачем? (не для холиваров)
  1. Я/МЫ Слайс
    Я почти уговорил себя, чтобы поскорее закрыть PR - но так резало это "слайс" в месте, где у человека должен быть ответ на вопрос "А в чем ваше преимущество? Как ваш способ связывать модулей может улучшить ситуацию?"

    И тут мы такие "чувак, мы тут слайсеры, у нас нет слова "модуль", онли "слайс"

    Это очень отбивает кмк

    image

  2. Too Confused
    Также заметил, что при "рефакторинге и мердже" сильно сбился изначальный смысл абзацев, так что свапнул предложения "ближе к канону"
    (можем в дальнейшем, опять же, обсудить твои предложения)

    image

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не, окей, все норм звучит)

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

- **Масштабирование проекта и команды**
Увеличение функциональности ведет к значительно меньшему усложнению проекта, т.к. вся логика распределена изолированно, и это распределение определяется однозначно.
Благодаря этому легко вводить новых людей в проект/команду, а также расширять функциональность проекта.

- **Контролируемое переиспользование логики**
Каждый модуль имеет свои ограничения и рекомендации на переиспользуемость согласно [своему слою][refs-splitting--layers].
Благодаря этому сохраняется баланс между соблюдением принципа `DRY` и возможностью адаптировать модуль под разные цели.

## Мотивация

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

В разделе [**Мотивация**][refs-motivation] подробно описаны причины возникновения методологии, а также сравнение с другими подходами.
В разделе [**Об архитектуре**][refs-architecture] перечислены типичные проблемы проектов, а также требования к идеальной архитектуре, которых стремится придерживаться Feature Sliced Design.

## Что дальше?

Expand All @@ -66,10 +58,10 @@ import Link from "@docusaurus/Link";

<Row
title="Быстрый старт"
description="Быстрое погружение в методологию"
description="Тур по основным понятиям и структуре, а также подробный разбор проекта на React"
azinit marked this conversation as resolved.
Show resolved Hide resolved
azinit marked this conversation as resolved.
Show resolved Hide resolved
to="/docs/get-started"
Icon={"🚀"}
tags={['Основы','Быстрый старт','Мотивация']}
tags={['Основы', 'Быстрый старт', 'Мотивация']}
/>
<Row
title="Гайды"
Expand Down Expand Up @@ -108,34 +100,11 @@ import Link from "@docusaurus/Link";
/>
<Row
title="Примеры"
description="Примеры проектов, спроектированных с Feature Sliced"
description="Примеры проектов, спроектированных по Feature Sliced Design"
to="/examples"
Icon={"🛠"}
/>

[refs-getstarted]: /docs/get-started
[refs-basics]: /docs/get-started/basics
[refs-basics--abstractions]: /docs/get-started/basics#abstractions
[refs-motivation]: /docs/get-started/motivation
[refs-motivation-why]: /docs/get-started/motivation#-почему-не-хватает-существующих-решений

[refs-concepts]: /docs/concepts
[refs-splitting]: /docs/concepts/app-splitting
[refs-splitting--layers]: /docs/concepts/app-splitting#group-layers
[refs-arch-req]: /docs/concepts/architecture#требования
[refs-arch-problems]: /docs/concepts/architecture#проблемы

[refs-guides]: /docs/guides
[refs-low-coupling]: /docs/concepts/low-coupling
[refs-migration-v1]: /docs/guides/migration/from-v1
[refs-examples]: /docs/guides/examples

[refs-reference]: /docs/reference
[refs-module]: /docs/reference/glossary#модуль
[refs-knowledge]: /docs/reference/knowledge-types

[refs-about]: /docs/about


[ext-ubiq-lang]: https://thedomaindrivendesign.io/developing-the-ubiquitous-language


[refs-architecture]: /docs/concepts/architecture