快速业务通道

基于Java的界面布局DSL设计与实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
mponent 接口,并且把组合的结果当作一个 Component 返回。这两个组合子的主要功能就是把给定的布局空间按照指定的比例进行分隔,并把给定的组件放到分隔好的布局空间中去。其中的算法比较简单,就不再赘述。

基于这些基本的原子元素和组合子,就可以构建出任意复杂程度的布局样式。在前面语言介绍小节中,我们给出了一些如:center、h_seq、v_seq、block 以及 block_with_margin 等简单布局样式的实现。读者可以根据自己的需要定义并积累自己的布局样式库。

前面提到过,我们的界面布局语言是分层的,大家可以看出,在最底层是我们的 Java Swing 界面开发语言,我们在其上构建出了界面布局位置描述语言,使用该布局位置描述语言中的组合子:beside 和 above,我们在其上又构建出了用来定义和表达各种布局样式的布局样式描述语言。这种层次关系如下图所示:

图 11. 层次关系

基于Java的界面布局DSL设计与实现 - 编程入门网

基于Java的界面布局DSL设计与实现(8)

时间:2011-03-07 IBM 孙鸣 邓辉

敏锐的读者会发现,在前面讲述的界面布局语言中仅仅涉及了界面布局元素的显示样式方面的内容,但是一个完整的界面是需要和后端的应用逻辑交互的,因此还需要一个粘合界面显示和应用模型的层次。

确实是这样的,我们在这里之所以没有提这项内容主要是为了避免陷入其实现的琐碎细节中,从而可以集中介绍界面布局语言本身。为了能够对界面布局元素进行编程控制,我们让每个布局元素都有一个"拥有者"。和布局元素在物理上的包含关系不同,"拥有者"是编程语义上的。也就是说,对布局元素在编程意义上的所有控制操作都在其"拥有者"中完成,这种思路完全隔离了显示和控制,其实就是 MVP 模式的一种实现。

比如,我们可以这样描述一个 Button:

Button().title("button1").ownby(btn1Controller);

关于 Button 的所有事件处理和操控都在 btn1Controller 中完成。有机会的话,我们会在后续的文章中对此进行详细的介绍,现在我们将其实现作为一个练习留给读者来完成。

关于设计的几点思考

在本文中,我们介绍了一种界面布局语言以及它的设计和实现。在此,我们有必要对其中的设计思路进行一个回顾。

在设计中,我们没有采用对象技术中常用的一些设计手段,我们没有对界面布局本身进行抽象,也不是设计出一些特定的界面布局管理器。相反,我们把对象技术当成一种低层的抽象工具,并基于它来构建更高层次的抽象,创建出更加接近我们所工作的问题领域的语言,从而获得更高的生产力、表达力以及可重用性(还有什么比语言更加易于重用),这就是目前探讨的比较热烈的面向语言编程(Language-Oriented Programming)。

前面已经介绍过,我们的界面布局语言是分层的,这种设计非常有助于构建健壮的程序。这里健壮的含意是指:问题领域中的一个小的更改,所导致的程序更改也应当是相应地小的。比如,我们在构建迷你计算器时,希望所有数字以及运算符按钮都在横向和纵向留一些空白,这个问题领域中的一个小的更改,所对应的程序更改就是把 block 更改为 block_with_margine 而已。此外,由于分层的存在,我们可以自由地修改不同层次的表达细节而对其他层次不会造成任何影响。也就是说,每一层提供了用于表达系统特征的不同词汇以及不同的更改方式和能力。

由于动态语言提供了更高的动态性和元编程能力,因此在动态语言中更容易实现这种设计思路,我们也用 Python 语言基于 wxPython 界面工具库实现了本文中讲解的界面布局语言,相比 Java,它的实现确实要容易和清晰地多。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号