Перейти к основному содержимому

Обзор

Layer - первый уровень разбиения приложения, согласно скоупу влияния модуля

layers-flow-themed

Структура

└── src/
├── app/ # Инициализирующая логика приложения
├── processes/ # (Опц.) Процессы приложения, протекающие над страницами
├── pages/ # Страницы приложения
├── widgets/ # Самостоятельные и полноценные блоки для страниц
├── features/ # (Опц.) Обрабатываемые пользовательские сценарии
├── entities/ # (Опц.) Бизнес-сущности, которыми оперирует предметная область
└── shared/ # Переиспользуемые модули, без привязки к бизнес-логике

Правила

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

    // Плохо
    - pages/../features/..
    - features/../entities/..
    // Хорошо
    + pages/**
    + features/**
  • Каждый слой может использовать (импортировать) только нижележащие слои

  • Чем выше расположен слой, тем выше уровень его ответственности и знаний о других слоях (сверху-вниз)

    • app > (processes) > pages > (widgets) > features > entities > shared
  • Чем ниже расположен слой - тем он больше используется в верхних слоях, а значит и тем больше опасности вносить в него изменения (снизу вверх)

    • shared > entities > features > (widgets) > pages > (processes) > app
LayerCan useCan be used by
appshared, entities, features, widgets, pages, processes-
processesshared, entities, features, widgets, pagesapp
pagesshared, entities, features, widgetsprocesses, app
widgetsshared, entities, featurespages, processes, app
featuresshared, entitieswidgets, pages, processes, app
entitiessharedfeatures, widgets, pages, processes, app
shared-entities, features, widgets, pages, processes, app

Как использовать?

  1. Сначала, выделить основные слои, актуальные для почти любого приложения:

    • app - для инициализирующей логики приложения
    • pages - для экранов приложения
    • shared - для абстрактной общеиспользуемой логики (UIKIT / helpers / API)
  2. Затем, выделяйте остальные слои по мере необходимости:

    • widgets - если логика на страницах начинает разрастаться и дублироваться
    • entities - если в проекте все равно разрастается количество деунифицированной логики
    • features - если в проекте становится сложно отследить начало и конец пользовательских сценариев, и контролировать их
    • processes - если же разрастается много надстраничной "сквозной логики"

Представители

note

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

app

app-themed-bordered

processes

processes-themed-bordered

pages

pages-themed-bordered

widgets

widgets-themed-bordered

features

features-themed-bordered

entities

entities-themed-bordered

shared

shared-themed-bordered

См. также

[01/12] logo-mini