Классификация платформ для разработки корпоративных приложений

Аватар пользователя stukalov

Если вы введете в поисковике «best java framework», то, вероятнее всего, наткнетесь на эту статью. В ней превосходно описано состояние дел в мире Java Enterprise, но при этом, как мне кажется, не хватает очень важной детали — классификации перечисленных фреймворков. Предлагаю посмотреть на эту экосистему под другим углом и не ограничиваться Java-экосистемой.

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

  1. Диапазон применения — какую часть приложения можно написать с помощью этого фреймворка? Сколько фреймворков понадобится — один или несколько?
  2. Скорость разработки — сколько времени сэкономит фреймворк?
  3. Управляемость и гибкость — какие у фреймворка ограничения по архитектуре приложения, производительности и т.д.?

Классификация фреймворков

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

Языки программирования высокого уровня, или подход «Без фреймворков»

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

Узкоспециализированные фреймворки

Это самый многочисленный класс. Все его представители упрощают разработку за счет повышения уровня абстракции и предоставления понятного API. При этом каждый такой фреймворк предназначен для своей узкой области. Связать воедино ORM, Middleware, UI, Messaging и прочие фреймворки — задача нетривиальная. У этого подхода есть своё преимущество — неплохой баланс между скоростью разработки и действительно высокой гибкостью.

Генераторы кода/Агрегаторы

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

Высокоуровневые full-stack фреймворки

Этот класс — следующий после Узкоспециализированных фреймворков уровень абстракции. Готовая инфраструктура, которую предлагают такие фреймворки, позволяет создавать корпоративные full-stack системы в разы быстрее. Например, Платформа CUBA предоставляет готовую архитектуру для создания 3-слойных приложений и включает в себя функции, без которых редко обходятся корпоративные системы: soft deletion, data-aware компоненты, хранилище файлов, а также модули высокого уровня: аутентификация и авторизация, аудит данных, и т.п. Этот класс, пожалуй, лучше всего подходит для разработки систем типа ERP, бизнес-приложений или другого пользовательского ПО для корпоративного сегмента.

Low/No Code фреймворки

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

Итоги

Чтобы выбрать подходящий фреймворк для разработки корпоративной системы, недостаточно просто поискать в интернете «top frameworks for enterprise» и взять первый из списка. Во-первых, для каждого конкретного проекта нужно найти оптимальный баланс между Применимостью, Скоростью разработки, а также Гибкостью и Управляемостью. После этого можно приступить непосредственно к выбору фреймворка из подходящего класса. При выборе уже самого фреймворка стоит учитывать уже более широкий круг параметров, например, предпочтительный язык программирования, размер сообщества, качество поддержки вендора, истории успеха и т.д.

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

Класс

Типичное применение

Подход «Без фреймворков»

  • Узкоспециализированные фреймворки
  • Низкоуровневые продукты, такие как in-memory grids, алгоритмы обработки больших данных, распознавание изображений и т.д.

Узкоспециализированные фреймворки

  • Корпоративные приложения с уникальной или нетипичной архитектурой
  • Микросервисы
  • Свой собственный backend
  • Платформы E-commerce
  • Enterprise Service Bus

Генераторы кода/Агрегаторы

  • Значительное ускорение на стадии запуска тех же типов проектов, что и в классе узкоспециализированных фреймворков

Высокоуровневые Full-stack фреймворки

  • ERP-приложения
  • Собственные BPMS-приложения
  • Управление мастер-данными
  • Сеть бизнес-приложений
  • Собственные приложения с типовыми энтерпрайз-требованиями

Low/No Code фреймворки

  • Простые сайты
  • Стандартные интернет-магазины
  • Корпоративные порталы
  • Простые/Типовые BPMS
  • Простые CRUD-приложения (учётные системы)

Читать далее

Комментарии