По общему признанию, Java Swing — очень недооцененная технология для корпоративных приложений. У меня была возможность работать на некоторых предприятиях, которые его использовали, и я очень восхищался поставленными приложениями. В то время они были намного удобнее в использовании по сравнению с теми скудными веб-приложениями (хотя разрыв сокращается). Нельзя сказать, что Свинг — это серебряная пуля, это далеко не так. В моих многочисленных попытках я обнаружил, что этого не хватает в некоторых областях:
- Как и многие другие API в Java, Swing предлагает только низкоуровневые API. Разработчик должен создать или выбрать структуру более высокого уровня.
- Я не люблю аргумент многословия, но в случае Swing, написание (и чтение) кода является длинным и утомительным.
- Наконец, в Swing отсутствует привязка между компонентом пользовательского интерфейса и его базовым значением. По крайней мере, одна попытка, о которой я знаю, была сделана в этом направлении, но она замерзла твердо уже пару лет, и, к сожалению, нет надежды пойти дальше.
Открытие гриффона
Поэтому вполне естественно, что когда я увидел презентацию Андреса Алмирея « Гриффон» в Женевском кружке, я был поражен. Griffon — это фреймворк для скриптового языка Groovy, который работает поверх JVM. Это краткое и обеспечивает:
- Концептуальная основа MVC
- Дополнительные функции обернуты вокруг общего Java API (например, коллекции) через Groovy
- Действительно легкое двунаправленное связывание
Типичный код вида Griffon выглядит так:
application(title: 'form', pack: true, locationByPlatform:true, iconImage: imageIcon('/griffon-icon-48x48.png').image, iconImages: [imageIcon('/griffon-icon-48x48.png').image, imageIcon('/griffon-icon-32x32.png').image, imageIcon('/griffon-icon-16x16.png').image]) { borderLayout() panel(constraints: CENTER, border: emptyBorder(6)) { gridLayout(rows:3, columns:2, hgap:6, vgap:6) label 'Name:' textField columns:20, text: bind(target: model, 'name', mutual: true) label 'Last Name:' textField columns:20, text: bind(target: model, 'lastName', mutual: true) label 'Address:' textField columns:20, text: bind(target: model, 'address', mutual: true) } panel(constraints: SOUTH) { gridLayout(rows:1, cols: 2, hgap:6, vgap:6) button('Reset', actionPerformed: controller.reset, enabled: bind{ model.resetEnabled }) button('Submit', actionPerformed: controller.submit, enabled: bind{ model.submitEnabled }) } }
Хорошие моменты
Griffon предлагает множество функций, направленных на повышение производительности:
- Griffon — это не только фреймворк, но и набор инструментов. Например, инструмент командной строки доступен для тех, кто не любит указывать и щелкать.
- На другом конце спектра Griffon предлагает тесную интеграцию Eclipse (если вы предварительно установили плагин Groovy )
- И в Groovy и документация грифона пронизана практическими примерами
- Groovy поддерживается SpringSource, символом долгосрочной поддержки
- Поддержка Griffon в списке рассылки кажется очень хорошей
- После создания ваше приложение может быть отправлено в виде апплета, Java Web Start или отдельного приложения! Это слишком хорошо, чтобы быть правдой!
Что может быть лучше
Я должен признаться, что я погрузился прямо в Гриффона, не тратя времени на прочтение большого количества документации, поэтому некоторые из этих моментов могли быть недостатком знаний с моей стороны. Тем не менее, другие действительны во всех случаях:
- Приложение, разработанное с помощью Griffon, имеет большое время запуска (несколько секунд). Это может не быть проблемой, и возможно потому, что она использует Groovy, но в некоторых случаях это может быть аргумент против Гриффона.
- Я не нашел способа интеграции с Maven: сборка с Maven обнаруживает некоторую недоступную ошибку зависимости. Для m2e, более новой версии m2eclipse, некоторые этапы жизненного цикла не охватываются, поэтому его нельзя использовать как есть. Я понимаю, что у Groovy есть собственный инструмент сборки ( Gant ), но некоторые из нас, смертных, все еще используют Maven
- Кажется, что Griffon — это работа Andres Almiray в одиночку (слава ему), но в долгосрочной перспективе это вызывает некоторые сомнения в долговечности каркаса.
Моя собственная попытка
Поскольку нет ничего лучше, чем проверенный метод «попробуй сам», я разработал эмбрион программы чтения JAR-файлов манифеста. Первые результаты можно найти на Github : приглашаются эксперты Groovy и Griffon, которые хотят высказать свое мнение … и раскрутить код для дальнейшего развития.