0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: java, фреймворк, проект, проектная работа, spring roo, jhipster, генератор приложений</p>
1
<p>Теги: java, фреймворк, проект, проектная работа, spring roo, jhipster, генератор приложений</p>
2
<p>Предлагаем вашему вниманию очередной<strong>выпускной проект</strong>, сделанный нашим выпускником<strong>Дмитрием Коганом</strong>. Дмитрий решил сравнить два инструмента для быстрого создания приложений на<strong>Java - Spring Roo и JHipster</strong>. Им была проделана огромная исследовательская работа, результат которой вы сейчас и увидите.</p>
2
<p>Предлагаем вашему вниманию очередной<strong>выпускной проект</strong>, сделанный нашим выпускником<strong>Дмитрием Коганом</strong>. Дмитрий решил сравнить два инструмента для быстрого создания приложений на<strong>Java - Spring Roo и JHipster</strong>. Им была проделана огромная исследовательская работа, результат которой вы сейчас и увидите.</p>
3
<p>При выполнении своей работы Дмитрий определил для себя следующие интересы: 1.<strong>Личный</strong>: попробовать написать веб-приложение без написания фронтенда. 2.<strong>Академический</strong>: изучить rapid application development (RAD) tools - Spring Roo и Jhipster. 3.<strong>Практический</strong>: исследовать возможность быстрого создания современного приложения со всеми необходимыми примочками.</p>
3
<p>При выполнении своей работы Дмитрий определил для себя следующие интересы: 1.<strong>Личный</strong>: попробовать написать веб-приложение без написания фронтенда. 2.<strong>Академический</strong>: изучить rapid application development (RAD) tools - Spring Roo и Jhipster. 3.<strong>Практический</strong>: исследовать возможность быстрого создания современного приложения со всеми необходимыми примочками.</p>
4
<p>Как известно, современное приложение - это сто одёжек, с застёжками и без, а бизнес-логики в нём зачастую совсем немного. К тому же, как верно процитировал Дмитрий Козьму Пруткова: "Специалист подобен флюсу: полнота его односторонняя". Действительно,<strong>не каждый разработчик - full-stack</strong>. Именно поэтому на рынке и существуют платформы Spring Roo и JHipster.</p>
4
<p>Как известно, современное приложение - это сто одёжек, с застёжками и без, а бизнес-логики в нём зачастую совсем немного. К тому же, как верно процитировал Дмитрий Козьму Пруткова: "Специалист подобен флюсу: полнота его односторонняя". Действительно,<strong>не каждый разработчик - full-stack</strong>. Именно поэтому на рынке и существуют платформы Spring Roo и JHipster.</p>
5
<h2>Spring Roo</h2>
5
<h2>Spring Roo</h2>
6
<p><strong>Технологии под капотом</strong>: - Spring Boot; - Proxy/CGLIB; - AspectJ.</p>
6
<p><strong>Технологии под капотом</strong>: - Spring Boot; - Proxy/CGLIB; - AspectJ.</p>
7
<p><strong>Технологии предоставляемые</strong>: - 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).</p>
7
<p><strong>Технологии предоставляемые</strong>: - 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).</p>
8
<p><strong>Интеграция</strong>: 1. Eclipse / STS: 2.<strong>IDEA</strong>- добавлена в 11-й версии, убрана в 15-й версии. Код:</p>
8
<p><strong>Интеграция</strong>: 1. Eclipse / STS: 2.<strong>IDEA</strong>- добавлена в 11-й версии, убрана в 15-й версии. Код:</p>
9
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<p>Вид готового приложения:</p>
9
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<p>Вид готового приложения:</p>
10
<p><strong>Выводы Дмитрия</strong>: - аспект сидит на аспекте и аспектом погоняет; - править и дополнять всё это чрезвычайно непривычно и сложно; - Spring Roo 2 стал не только шагом вперёд, но и шагом назад: возможности разработки и технологии не только добавились, но и потерялись; - из фронтенда - один Timlif; - нет мониторинга; - разработкой неспешно занимается не слишком большой испанский коллектив авторов из DISID; - полноценной частью Spring стека Roo так и не стал; - примеров сопряжения с различными иными технологиями не слишком много; - вопросов и ответов по Spring Roo не накоплено в достаточном количестве; - энтузиазма на будущее не видно.</p>
10
<p><strong>Выводы Дмитрия</strong>: - аспект сидит на аспекте и аспектом погоняет; - править и дополнять всё это чрезвычайно непривычно и сложно; - Spring Roo 2 стал не только шагом вперёд, но и шагом назад: возможности разработки и технологии не только добавились, но и потерялись; - из фронтенда - один Timlif; - нет мониторинга; - разработкой неспешно занимается не слишком большой испанский коллектив авторов из DISID; - полноценной частью Spring стека Roo так и не стал; - примеров сопряжения с различными иными технологиями не слишком много; - вопросов и ответов по Spring Roo не накоплено в достаточном количестве; - энтузиазма на будущее не видно.</p>
11
<p><strong>Однако</strong>: - сама разработка производится быстро с помощью скриптов, в рантайме ничего не происходит, поддерживается система плагинов; - имеется удобный и многофункциональный пользовательский интерфейс с поиском "из коробки".</p>
11
<p><strong>Однако</strong>: - сама разработка производится быстро с помощью скриптов, в рантайме ничего не происходит, поддерживается система плагинов; - имеется удобный и многофункциональный пользовательский интерфейс с поиском "из коробки".</p>
12
<p><strong>Итого</strong>: - идеален для CRUD-приложений, а также CRUD-частей сложных приложений, которые могут быть выполнены в отличном от основного дизайне; - не подходит для создания прототипов из-за сложностей последующего рефакторинга.</p>
12
<p><strong>Итого</strong>: - идеален для CRUD-приложений, а также CRUD-частей сложных приложений, которые могут быть выполнены в отличном от основного дизайне; - не подходит для создания прототипов из-за сложностей последующего рефакторинга.</p>
13
<h2>JHipster</h2>
13
<h2>JHipster</h2>
14
<p><strong>Технологии под капотом</strong>: - Yeoman; - Npm; - nodeJS.</p>
14
<p><strong>Технологии под капотом</strong>: - Yeoman; - Npm; - nodeJS.</p>
15
<p><strong>Технологии предоставляемые</strong>:</p>
15
<p><strong>Технологии предоставляемые</strong>:</p>
16
<p>Подробности использования<strong>JHipster</strong>вы можете посмотреть по<a>ссылке на Github</a>Дмитрия, мы же предлагаем ознакомиться со сделанными им<strong>выводами</strong>: - практически всё, что должно быть в современном веб-приложении, реализовано; - добавлены всякие плюшки вроде Jhipster Online, Browsersync, JDL Studio и т. п.; - одной командой реализуются kubernetes, heroku, docker-compose и т. д.; - используется весь современный фронтенд: React, Angular, Vue.</p>
16
<p>Подробности использования<strong>JHipster</strong>вы можете посмотреть по<a>ссылке на Github</a>Дмитрия, мы же предлагаем ознакомиться со сделанными им<strong>выводами</strong>: - практически всё, что должно быть в современном веб-приложении, реализовано; - добавлены всякие плюшки вроде Jhipster Online, Browsersync, JDL Studio и т. п.; - одной командой реализуются kubernetes, heroku, docker-compose и т. д.; - используется весь современный фронтенд: React, Angular, Vue.</p>
17
<p><strong>Однако</strong>: - JHipster создаёт невероятное количество разнообразного кода (вместе с подкаталогом node_modules - почти гигабайт и под сотню тысяч файлов); - как минимум требуется дополнительно инсталлировать node.js; - для Java-программиста большая часть кода - огромный чужой мир во всей красе и сложности; - как изменять этот мир под себя, решительно непонятно; - зато понятно, что делать с бэкенд-частью; - важно, что развитие JHipster идёт семимильными шагами с участием множества программистов со всего мира; - накоплена значительная база решений и FAQs.</p>
17
<p><strong>Однако</strong>: - JHipster создаёт невероятное количество разнообразного кода (вместе с подкаталогом node_modules - почти гигабайт и под сотню тысяч файлов); - как минимум требуется дополнительно инсталлировать node.js; - для Java-программиста большая часть кода - огромный чужой мир во всей красе и сложности; - как изменять этот мир под себя, решительно непонятно; - зато понятно, что делать с бэкенд-частью; - важно, что развитие JHipster идёт семимильными шагами с участием множества программистов со всего мира; - накоплена значительная база решений и FAQs.</p>
18
<p><strong>Итого</strong>: благодаря поддержке всего, чего только можно, JHipster отлично подходит не только для CRUD-приложений, как таковых, но и для создания прототипов приложений. Прототипы с помощью флагов можно создавать вообще без фронтенда.</p>
18
<p><strong>Итого</strong>: благодаря поддержке всего, чего только можно, JHipster отлично подходит не только для CRUD-приложений, как таковых, но и для создания прототипов приложений. Прототипы с помощью флагов можно создавать вообще без фронтенда.</p>
19
<p><em>Пожалуй, все вопросы отпадают сами собой. Впрочем, вы всегда можете задать их в комментариях.</em></p>
19
<p><em>Пожалуй, все вопросы отпадают сами собой. Впрочем, вы всегда можете задать их в комментариях.</em></p>
20
20