Модульный или монолитный

Было время, когда мы не хотели отказываться от монолитной серверной архитектуры, но микросервисы и бессерверная архитектура уже становятся обычными вариантами использования. В случае с фронтенд-приложениями все на какое-то время застряло в одном большом незаменимом фрагменте JavaScript.

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

Чтобы концепция модульной системы работала, модули должны быть независимыми и стабильными, без общих компонентов и зависимостей.

Структура файла проекта

Многие фреймворки, такие как React.js, предлагают способы написания и импорта компонентов внутри фреймворка. Это побуждает разработчиков смешивать части, состоящие из разных функций, в один изящный компонент. Разработчики должны держать компоненты внутри себя, чтобы не загрязнять остальную часть кодовой базы, и взаимодействовать только через стандартные интерфейсы.

/src/Authentication/ — модель, представление, контроллер
/src/Payment/ — модель, представление, контроллер
/src/Referral/ — модель, представление, контроллер

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

Мультиплатформенное развертывание

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

Нативные функции Android и iOS могут использоваться с Cordova, а функции, специфичные для платформы, могут вызываться обработчиком.

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

Надежность и устойчивость

Написание динамических интерфейсов не так просто, как может показаться. Поскольку ваши пользователи, вероятно, не являются роботами или обученным персоналом, все становится немного грязным, когда вы объединяете все больше и больше функций в свою систему.

В JavaScript есть много ловушек, которые делают его непрактичным и непредсказуемым для обработки данных. Программистам могут потребоваться некоторые усилия и опыт, чтобы правильно работать с размытой системой типов и нечистыми реализациями. В последние дни люди работали над тем, чтобы сделать его жизнеспособным, внося изменения в язык или структуру, такие как Redux и TypeScript, которые, я думаю, необходимы для разработки интерфейсных приложений на основе JavaScript.

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

«Тот же вход гарантирует тот же результат»

- обычно не бывает

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

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

Сделав шаг вперед

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

На самом деле это означает, что программа на 100% предсказуема в рамках всего приложения Elm. Это невероятно, потому что с помощью всего одной встроенной функции Elm может визуализировать всю HTML DOM, используя ленивое сравнение различий. Если на большей части страницы нет изменений, никогда не было необходимости обновлять 99% элементов DOM для этой разницы в 1%! Результатом стал легкий и быстрый интерфейс, который можно запустить где угодно.

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

Конечно, есть способы использовать компоненты React.js напрямую для замены элемента DOM и позволить ему хорошо работать с обычным JavaScript, чтобы использовать его вместе с Elm.

Вывод

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

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