Все статьи
Содержание

    Классификация платформ для разработки

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

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

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

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

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

    text

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

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

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

    Это самый многочисленный класс. Все его представители упрощают разработку за счет повышения уровня абстракции и предоставления понятного 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-приложения (учётные системы)
    Jmix - это open-source платфора быстрой разработки бизнес-приложений на Java