Spring Roo vs JHipster: проект выпускника курса «Разработчик на Spring Framework» | OTUS

Spring Roo vs JHipster: проект выпускника курса «Разработчик на Spring Framework»

Spring_Deep_6.5-5020-46407f.png

Предлагаем вашему вниманию очередной выпускной проект, сделанный нашим выпускником Дмитрием Коганом. Дмитрий решил сравнить два инструмента для быстрого создания приложений на Java — Spring Roo и JHipster. Им была проделана огромная исследовательская работа, результат которой вы сейчас и увидите.

При выполнении своей работы Дмитрий определил для себя следующие интересы: 1. Личный: попробовать написать веб-приложение без написания фронтенда. 2. Академический: изучить rapid application development (RAD) tools – Spring Roo и Jhipster. 3. Практический: исследовать возможность быстрого создания современного приложения со всеми необходимыми примочками.

Как известно, современное приложение – это сто одёжек, с застёжками и без, а бизнес-логики в нём зачастую совсем немного. К тому же, как верно процитировал Дмитрий Козьму Пруткова: «Специалист подобен флюсу: полнота его односторонняя». Действительно, не каждый разработчик — full-stack. Именно поэтому на рынке и существуют платформы Spring Roo и JHipster.

Spring Roo

Технологии под капотом: — Spring Boot; — Proxy/CGLIB; — AspectJ.

Технологии предоставляемые: — Spring Data JPA/Hibernate; — SQL; — Thymleaf/Freemarker; — Spring MVC; — Spring Web Flow; — Spring Security (Basic Auth); — REST/SOAP; — Test: Unit/Integration; — JasperReports (exporting data to CSV, PDF and XLS).

Интеграция: 1. Eclipse / STS: 1-20219-466def.png 2. IDEA — добавлена в 11-й версии, убрана в 15-й версии. Код:

project setup --topLevelPackage dik.roo.collmate
jpa setup --provider HIBERNATE --database H2_IN_MEMORY
enum type --class ~.domain.reference.Status
enum constant --name OK
enum constant --name Away
enum constant --name Lost
enum constant --name Expected
enum constant --name Undefined
entity jpa --class ~.domain.Cd --sequenceName CD_SEQ
entity jpa --class ~.domain.Dvd --sequenceName DVD_SEQ
focus --class ~.domain.Cd
field string --fieldName name --notNull
field string --fieldName performer
field string --fieldName releaseYear
field string --fieldName diskCount
field string --fieldName medium
field string --fieldName label
field enum --fieldName status --type ~.domain.reference.Status
field date --fieldName added --type java.util.Calendar –past
focus --class ~.domain.Dvd
field string --fieldName name --notNull
field string --fieldName releaseYear
field string --fieldName diskCount
field string --fieldName format
field string --fieldName lang
field enum --fieldName status --type ~.domain.reference.Status
field date --fieldName added --type java.util.Calendar --past
repository jpa --all
service --all 
web mvc setup 
web mvc view setup --type THYMELEAF
web mvc templates setup --type THYMELEAF 
web mvc controller --all --responseType JSON --pathPrefix /rest
web mvc controller --all --responseType THYMELEAF
web mvc finder --all --responseType THYMELEAF
test unit --class ~.domain.Cd
test unit --class ~.domain.Dvd
test integration --class ~.repository.CdRepository 
test integration --class ~.repository.DvdRepository
test integration --class ~.web.CdsCollectionJsonController
test integration --class ~.web.CdsCollectionThymeleafController
test integration --class ~.web.DvdsCollectionJsonController

Вид готового приложения: 2-20219-8461f5.png

Выводы Дмитрия: — аспект сидит на аспекте и аспектом погоняет; — править и дополнять всё это чрезвычайно непривычно и сложно; — Spring Roo 2 стал не только шагом вперёд, но и шагом назад: возможности разработки и технологии не только добавились, но и потерялись; — из фронтенда – один Timlif; — нет мониторинга; — разработкой неспешно занимается не слишком большой испанский коллектив авторов из DISID; — полноценной частью Spring стека Roo так и не стал; — примеров сопряжения с различными иными технологиями не слишком много; — вопросов и ответов по Spring Roo не накоплено в достаточном количестве; — энтузиазма на будущее не видно.

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

Итого: — идеален для CRUD-приложений, а также CRUD-частей сложных приложений, которые могут быть выполнены в отличном от основного дизайне; — не подходит для создания прототипов из-за сложностей последующего рефакторинга.

JHipster

Технологии под капотом: — Yeoman; — Npm; — nodeJS.

Технологии предоставляемые:

3-20219-7811ee.png 4-20219-65919e.png 5-20219-398c3f.png

Подробности использования JHipster вы можете посмотреть по ссылке на Github Дмитрия, мы же предлагаем ознакомиться со сделанными им выводами: — практически всё, что должно быть в современном веб-приложении, реализовано; — добавлены всякие плюшки вроде Jhipster Online, Browsersync, JDL Studio и т. п.; — одной командой реализуются kubernetes, heroku, docker-compose и т. д.; — используется весь современный фронтенд: React, Angular, Vue.

Однако: — JHipster создаёт невероятное количество разнообразного кода (вместе с подкаталогом node_modules – почти гигабайт и под сотню тысяч файлов); — как минимум требуется дополнительно инсталлировать node.js; — для Java-программиста большая часть кода – огромный чужой мир во всей красе и сложности; — как изменять этот мир под себя, решительно непонятно; — зато понятно, что делать с бэкенд-частью; — важно, что развитие JHipster идёт семимильными шагами с участием множества программистов со всего мира; — накоплена значительная база решений и FAQs.

Итого: благодаря поддержке всего, чего только можно, JHipster отлично подходит не только для CRUD-приложений, как таковых, но и для создания прототипов приложений. Прототипы с помощью флагов можно создавать вообще без фронтенда.

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

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто