诚然,Java的Swing对于企业内部应用程序是一种被低估的技术。 我有机会为一些使用它的企业工作,我非常欣赏交付的应用程序。 当时,与贫乏的Web应用程序相比,它们的可用性要好得多(即使差距正在缩小)。 这并不是说Swing是一个银弹,远非如此。 在众多尝试中,我发现它在某些方面缺乏:
- 像Java中的许多API一样,Swing仅提供低级API。 由开发人员决定是否创建或选择更高级别的框架。
- 我不喜欢冗长的论点,但是在Swing的情况下,编写(和阅读)代码既长又累。
- 最后,Swing在UI组件及其基础值之间缺乏绑定。 我知道至少有一次尝试过朝这个方向做,但是几年来它一直是固态的,可悲的是没有希望进一步发展。
狮riff发现
因此,很自然地,当我在日内瓦水罐车展上看到安德烈斯·阿尔米雷 ( Andres Almiray )的格里芬演讲时,我感到非常震惊。 Griffon是Groovy脚本语言的框架,该框架在JVM之上运行。 简洁明了,并提供:
- MVC概念框架
- 通过Groovy围绕通用Java API(例如集合)包装的其他功能
- 真正简单的双向绑定
典型的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:'
textFieldcolumns:20,
text:bind(target:model,'name',mutual:true)
label'Last Name:'
textFieldcolumns:20,
text:bind(target:model,'lastName',mutual:true)
label'Address:'
textFieldcolumns: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})
}
}
取自Github的代码
优点
Griffon提供了许多旨在提高生产力的功能:
- Griffon不仅是一个框架,还是一个工具包套件。 例如,对于不喜欢点击的用户,可以使用命令行工具。
- 另一方面,Griffon提供了紧密的Eclipse集成(如果您事先安装了Groovy插件 )
- Groovy和Griffon的文档都充满了实际示例
- Groovy得到了SpringSource的支持,这是长期支持的象征
- 邮件列表中的Griffon支持似乎非常好
- 创建后,您的应用程序可以作为applet,Java Web Start或独立应用程序发布! 这太好了,难以置信!
有什么更好的
我必须承认,我是在不花时间阅读大量文档的情况下直接进入Griffon的,所以我可能缺少其中的一些知识。 尽管如此,其他情况在所有情况下均有效:
- 用Griffon开发的应用程序具有很高的启动时间(几秒钟)。 这可能不是问题,可能是因为它使用了Groovy,但在某些情况下可能是反对Griffon的论点。
- 我发现没有办法与Maven集成:用Maven进行构建会发现一些不可用的依赖项错误。 对于m2ec(较新的m2eclipse版本)而言,某些生命周期阶段未涵盖在内,因此无法使用。 我了解Groovy人有他们自己的构建工具( Gant ),但我们中的某些凡人仍然使用Maven😉
- 格里芬似乎仅是安德列斯·阿尔米雷(Andres Almiray)的作品(对他而言是个荣誉),但从长远来看,它对框架的寿命存有疑问
我自己尝试
由于没有什么比经过实践证明的“自己动手做”的方法更好,因此我开发了JAR清单文件读取器的雏形。 可以在Github上找到第一个结果:欢迎Groovy和Griffon专家给我他们的反馈...并分发代码以进一步发展。