Если вы введете в поисковике «best java framework», то, вероятнее всего, наткнетесь на эту статью. В ней превосходно описано состояние дел в мире Java Enterprise, но при этом, как мне кажется, не хватает очень важной детали — классификации перечисленных фреймворков. Предлагаю посмотреть на эту экосистему под другим углом и не ограничиваться Java-экосистемой.
По сути, выбор лучшего фреймворка (или их набора) для разработки приложения — это поиск оптимального баланса между следующими критериями:
- Диапазон применения — какую часть приложения можно написать с помощью этого фреймворка? Сколько фреймворков понадобится — один или несколько?
- Скорость разработки — сколько времени сэкономит фреймворк?
- Управляемость и гибкость — какие у фреймворка ограничения по архитектуре приложения, производительности и т.д.?
Классификация фреймворков
Я решил совместить эти критерии, основные самые популярные фреймворки разных классов и их особенности в одной диаграмме, и вот что получилось:
Языки программирования высокого уровня, или подход «Без фреймворков»
«Без фреймворков» — это вырожденный случай, который подходит для любых задач и отличается наибольшей управляемостью и гибкостью. Очевидно, что этот способ разработки корпоративных приложений самый медленный, ведь, по сути, вам приходится изобретать велосипед. Этот подход хорош для создания узкоспециализированных фреймворков, которые, в свою очередь, повышают скорость разработки.
Узкоспециализированные фреймворки
Это самый многочисленный класс. Все его представители упрощают разработку за счет повышения уровня абстракции и предоставления понятного 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» и взять первый из списка. Во-первых, для каждого конкретного проекта нужно найти оптимальный баланс между Применимостью, Скоростью разработки, а также Гибкостью и Управляемостью. После этого можно приступить непосредственно к выбору фреймворка из подходящего класса. При выборе уже самого фреймворка стоит учитывать уже более широкий круг параметров, например, предпочтительный язык программирования, размер сообщества, качество поддержки вендора, истории успеха и т.д.
Для наглядности я внёс в одну таблицу все классы фреймворков и типы задач, которые они решают лучше всего:
Класс |
Типичное применение |
Подход «Без фреймворков» |
|
Узкоспециализированные фреймворки |
|
Генераторы кода/Агрегаторы |
|
Высокоуровневые Full-stack фреймворки |
|
Low/No Code фреймворки |
|