Coder Social home page Coder Social logo

awesome-news-js's Introduction

News-JS Example 🍰 Feature-Sliced Design

Описание

Архитектурная методология для фронтенд проектов

https://feature-sliced.design/ru/

Минимальный пример на JavaScript без использования фреймворков и библиотек, на примере проекта Migration: News API to TS из RS School.

Структура проекта

🍰 Feature-Sliced Design: общая схема

fsd

Layers - Слои

Слои - это первый уровень организационной иерархии в Feature-Sliced Design.

Приложение состоит из 6-ти слоёв, организованных вертикально, расположенных от наибольшей ответственности и зависимости к наименьшей:

src/
|
+-- app       # Приложение
|
+-- pages     # Страницы
|
+-- widgets   # Виджеты 
|
+-- features  # Фичи/функции
|
+-- entities  # Сущности 
|
+-- shared    # Общий 
Layer Description
app Приложение - Всё, что касается всего приложения, как в техническом смысле (например, провайдеры контекста), так и в бизнес-смысле (например, аналитика)
pages Страницы - Полноценные страницы
widgets Виджеты - Самодостаточные блоки пользовательского интерфейса возникли из композиции единиц более низкого уровня, таких как сущности и функции
features Фичи/функции - Действия, которые пользователь может совершать в приложении для взаимодействия с бизнес-сущностями
entities Сущности - Понятия из реального мира, которые вместе образуют суть проекта.
shared Общий - Изолированные модули, компоненты и абстракции, отдельные от специфики проекта или бизнеса.

Слои состоят из слайсов — сильно сцепленных групп модулей. Feature-Sliced Design поддерживает низкую связанность, поэтому зависимости между слайсами регулируются правилом импортов для слоёв:

📌 Модуль в слайсе может импортировать другие слайсы только в том случае, если они расположены на слоях строго ниже.

Slices - Слайсы

Слайсы - это второй уровень в организационной иерархии Feature-Sliced Design. Их основное назначение - группировать код по его значению для продукта, бизнеса или просто приложения.

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

src/entities/
|
+-- news    # Определение статических элементов UI, хранилища данных и операций CRUD
|
+-- source  # Определение статических элементов UI, хранилища данных и операций CRUD

src/features
|
+-- source  # Интерактивные элементы UI, локальные состояния или запросы к API,
            # которые позволяют выполнять действия

Слои shared и app не могут содержать слайсов.

📌 Каждый слайс (и сегмент на слоях, не имеющих слайсов) должен содержать определение публичного API.

📌 Модули вне этого слайса/сегмента могут ссылаться только на публичный API, а не на внутреннюю файловую структуру этого слайса/сегмента.

Segments - Сегменты

Сегменты - это третий и последний уровень в организационной иерархии, их цель - группировать код по его технической природе.

Существует несколько стандартизированных названий сегментов:

  • ui - компоненты пользовательского интерфейса, функции форматирования данных
  • model - бизнес-логика и хранилища данных, функции для обработки этих данных
  • lib - вспомогательный инфраструктурный код
  • api - взаимодействие с внешними API, API-методы бэкенда
src/entities/news/
|
+-- api       # API-методы, в том числе использующие API-клиент из shared
|
+-- model     # Хранилище объектов этой сущности и функции для обработки. 
|
+-- ui        # Скелет бизнес-сущности со слотами для интерактивных элементов
|
+-- index.ts  # Public API

Другие сегменты допускаются, но должны создаваться только по необходимости. Наиболее распространенными местами для других сегментов являются слои App и Shared, где срезы не имеют смысла.

Общее

Точка входа (entry point), вместо main.ts

src/
|
+-- app/index.ts

Установка

git clone https://github.com/shopot/awesome-news-js.git

cd awesome-news-js

git checkout fsd

npm install

Запуск приложения

npm run dev

awesome-news-js's People

Contributors

shopot avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.