Поймите плюсы и минусы модульной архитектуры внешнего интерфейса

Статья, которую вы читаете, является частью серии, посвященной фронтенд-архитектуре. В этой статье мы рассмотрим простой модульный подход. Основная концепция этой архитектуры заключается в четком разделении модулей приложения.

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

Оглавление

Обзор архитектуры

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

Давайте начнем изучение этого подхода с изучения его компонентов. В большинстве случаев он состоит всего из четырех частей: страницы, модули, компоненты и пользовательский интерфейс.

  • UI — каталог для компонентов пользовательского интерфейса, таких как кнопки, элементы выбора и ввод.
  • components — каталог для менее независимых фрагментов кода. Хорошим примером этого может быть ProductCard. Однако элементы в этом каталоге не должны иметь какой-либо конкретной бизнес-логики, поскольку они должны оставаться пригодными для повторного использования.
  • modules —каталог для независимых модулей вашего приложения. SignInForm — яркий пример изолированного модуля со своей логикой и задачами.
  • pages — каталог, содержащий маршруты приложений.

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

Теперь попробуем разобраться в каждой из этих частей подробнее.

UI

Пользовательский интерфейс должен состоять только из многократно используемых компонентов (проект ui-kit). По сути, это костяк проекта. Он формирует основу, на которой строятся другие уровни, и не должен содержать никакой бизнес-логики. В противном случае использование компонентов из этого модуля станет затруднительным и ненадежным.

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

Компоненты

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

Имейте в виду, что запрещено импортировать объекты из слоев модулей и страниц.

Модули

Объекты в этом каталоге должны быть очень независимыми и иметь свою собственную зону ответственности. Все необходимые функции, такие как вспомогательные функции, хранилища, константы и взаимодействия с API, должны быть объявлены и использованы в модуле. Это помогает предотвратить разброс функций по всему проекту и упрощает обслуживание. Таким образом, мы сохраняем согласованность и несвязанность вещей, что является нашей глобальной целью.

Один важный момент! Каждый модуль должен иметь и index.js файл, в котором объявлен экспорт для внешнего использования (известный как «Общедоступный API»). Основная цель этого файла — изолировать внутренности модуля. Это помогает установить четкие связи и избежать хаотической связи.

Имейте в виду, что импорт объектов из других модулей и страниц запрещен.

Страницы

По сути, каждый элемент каталога pages представляет собой комбинацию различных модулей. Страницы также могут быть разбиты на более мелкие подкаталоги. Ключевое различие между страницами и модулями — толщина логики. Страницы также могут быть разделены на более мелкие подкаталоги. Основное различие между страницами и модулями заключается в объеме бизнес-логики, которую они содержат. Количество страниц должно быть минимальным, а вся бизнес-логика должна быть размещена в модулях для использования на уровне страницы.

Плюсы и минусы архитектуры

Как и все другие архитектуры, простой модульный подход имеет свои преимущества и недостатки.

Плюсы:

  • Выделение функциональности модуля концепцией «публичного API»
  • Четкий однонаправленный поток данных (страницы => модули => компоненты => пользовательский интерфейс)
  • Высокая возможность повторного использования за счет разделения слоев
  • Улучшенное обслуживание и более простая возможность рефакторинга
  • Высокая связность внутри модулей и низкая связь между ними

Минусы:

  • Определение принадлежности объекта (модули или компоненты) может быть сложной задачей.
  • Что делать, если нам нужен один модуль внутри другого?
  • Некуда ставить бизнес-компоненты!
  • Неясная связь с глобальными состояниями и помощниками

Сравнение с «классическим подходом» (или без архитектуры)

Для справки: «Классический подход» ранее обсуждался в этой статье.



Архитектуры внешнего интерфейса: «Классический подход (без архитектуры)
Изучите плюсы и минусы наиболее распространенной архитектуры внешнего интерфейсаjavascript.plainenglish.io»



В целом такой подход намного лучше, чем «Классический». Так как это обеспечивает более надежную конструкцию. Преимущества довольно очевидны и наглядны:

  • Более быстрая навигация по проекту (легче найти компоненты, функции и т. д.)
  • Понятная и простая структура
  • Меньшая связанность и более высокая сплоченность в системе
  • Лучшее обслуживание и масштабируемость
  • Более быстрое предоставление функций благодаря значительному улучшению опыта разработчиков.
  • С этим подходом может работать большая команда разработчиков.

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

В следующей статье мы обсудим наиболее надежное решение этой проблемы.🌟Ждите следующую статью из серии!)

Хотите узнать больше?







Реагируйте на «полиморфные компоненты с помощью TypeScript
Реальный практический примерbetterprogramming.pub»





Спасибо, что прочитали!

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

Не забудь подписаться⭐️

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.

Повысьте узнаваемость и признание вашего технического стартапа с помощью Circuit.