Статьи

Попытка Гриффона и Люблю Это


По общему признанию, 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, которые хотят высказать свое мнение … и раскрутить код для дальнейшего развития.