现在的软件越来越大,越来越复杂,体现在用户交互上尤为明显,导致相关设计开发不再像使用
IBM RPG
那样简单。开发人员需要了解很多的相关知识才能够开发出一个健壮的
Rich Client,
本文就以设计模式为切入点,对此展开讨论,目的是让大家通过本文对
GUI
设计领域里的一些设计模式有个大概的了解。
看到这个题目,我估计绝大部分朋友会第一时间想到
model-view-controller
(
MVC
)模式。的确这个是在
GUI
设计领域里应用最为广泛的模式了,
3
个模块相互之间交互,大家耳熟能详,我就不多费笔墨了,不了解的朋友请察看相关资料。本文主要介绍一些大家可能还不太熟悉的模式,让大家对
GUI
设计领域相关的设计模式有个大概的了解。本文只会对所有的模式进行粗略的介绍,文章末尾列出了每一个模式的原出处,如果哪位朋友对某个模式特别感兴趣可以进行深入的解读。
Autonomous View
软件开发总是从小逐渐演变到大,从简到繁。
最初,一个
Frame
可能只包括一个
Panel,
上面只有几个输入栏,几个按钮。可能包含一些展示逻辑(
presentation logic
),但是这些逻辑是非常简单的,这个时候我们应该使用
Autonomous View
模式,也就是只用一个类来实现所有的功能。具体来说就是每个
window
或
frame
一个类,把实现展示逻辑的代码直接写到
view
类中。这样做的好处就是方便快捷,缺点就是不太方便测试
,
一个类实现了多种功能,任何一个功能的改变都导致类的改变。
随着软件的成长,当
view
及其相关的展示逻辑变得比较复杂时,
view
和展示逻辑就需要分开了,就好像当年
business logic
从
service
层脱离出来一样。这样做的好处是
view
和逻辑分离,代码易于共享,易于管理;逻辑功能可以重复使用,易于测试。还有很多其他的好处,介绍
MVC
的相关书籍已做了详细说明,我就不在这里展开了。
在进行
view
和逻辑分离的工作中,到目前为止有三种模式可以采用,她们分别是
MVC, Model-View-Presenter (MVP),
以及我会重点介绍的
Presentation Model.
MVC
我在文章开始就提到了不会对她进行展开,不了解的朋友请参考相关书籍。
MVP
由
Martin Fowler
发现并进行研究,从根本上来说,她只是个
MVC
的变种。在
MVC
中
view
直接处理相关的
GUI event
,比方说,键盘鼠标事件,
checkBox
被选中,按钮被按等等。而在
MVP
中
view
接收到事件,然后会将它们传递到
Presenter,
如何具体处理这些事件,将由
Presenter
来完成。从
class diagram
上来看,就是
Presenter
有
View
和
Model
的引用,
Presenter
负责来管理其他两个模块。跟据两者不同来看,
MVC
比较适合用来开发
components,
而
MVP
比较适合进行
applications
的开发
,
因为使用
MVP
导致绝大部分逻辑代码集中在
Presenter,
而
view
变得非常简单
,
适当采用良好的编码风格,可以让毫无经验的编码人员稍加培训立刻上岗,大大加速开发
view
的速度,
Presentation Model
也是由
Martin Fowler
发现并进行研究,从根本上来说就是把所有的逻辑功能完全浓缩到
model
模块里去,这样我们就只有
2
个模块:
View
和
Presentation Model
。其中
View
和
MVP
中的
View
一样,具有上面提到的所有优点,而
Presentation Model
则起着承上启下的作用,她连接
domain object
并将其展现在
view
上。看到这里聪明的读者可能会发现这个模式有个缺点,就是在
view, presentation model,
和
domain object
之间一定要保持同步。在其他两个模式中,这个功能可以由
Controller
和
Presenter
来完成。而在
presentation model
模式中却没有一个合适的地方来实现,
在
view
里肯定不行,在
model
里也不太合适。也就是说当我们使用
presentation model
进行开发时,我们所使用的框架必须要提供这种同步功能。在
windows
世界里
.Net data binding
就是这种功能的实际实现。如果我们使用
Swing
开发,很抱歉,
Swing
没有这种功能。而作为
Swing
的扩展,
JGoodies binding
比较完美的解决的这个遗憾。
选择
模式已经介绍完了,到了选择的时候了。其实看到这里大家应该已经有个比较清晰的
big picture
了。那么当我们进行
GUI
开发时,何时选用什么模式呢?
我的建议是:
- 对于简单的
view
,直接使用
Autonomous View.
- 开发
component
级别的
GUI,
至少要使用
MVC.
- 开发
applications,
则应该采用
MVP
或者是
Presentation Model
那么如果是开发
application
到底应该使用
MVP
还是
Presentation Model
呢?这应该是绝大部分开发人员关心的问题。
Martin fowler
在他的文章中说是
it really comes down to how easy it is to do the pattern in your GUI environment and on your own personal tastes.
我觉得不完全对。还记得前面说
presentation model
有个缺点吧
,
就是那个同步的问题。问题总是有两面性的,当我们换个角度来考虑这个问题时缺点就变成了优点了!简而言之,如果再开发中使用了像
JGoodies
这样的
framework
,她提供了完善的同步服务,那么我们应该毫不犹豫的使用
presentation model,
因为同步问题已被
framework
解决,应用开发人员不需要投入时间在这些问题上。而相反,使用
MVP
的话,应用开发人员却不得不面对这些问题,直接导致开发周期延长。另外还有一个使用
presentation model
原因就是在
swing
中
presentation model
已经比较完善(请注意,是比较完善而非完美)得到了实现,比方说
ListModel, TableModel
,并且针对每一个
model
也都实现了同步。美中不足就是
swing
提供的每一个
model
都是针对具体
GUI component
的,而且没有提供一个全局同步策略。而
JGoodies binding
比较完美的解决的这个问题。
最后还要提到一个比较小的模式就是
value model
,她是
value object
的变种,她提供了一种
set
,
get
,和
observe
某个对象功能,这个对象通常是个
Java Bean
,当然也可以是其他的对象类型。这个模式在
JGoodies
中应用非常广泛,我会在以后的文章中作深入讲解。
相关连接:
Autonomous View http://www.martinfowler.com/eaaDev/AutonomousView.html
MVP http://www.martinfowler.com/eaaDev/ModelViewPresenter.html
Presentation Model http://www.martinfowler.com/eaaDev/PresentationModel.html
Organizing Presentation Logic
http://www.martinfowler.com/eaaDev/OrganizingPresentations.html
Value Object http://java.sun.com/blueprints/corej2eepatterns/Patterns/TransferObject.html
JGoodies http://www.jgoodies.com
分享到:
相关推荐
同时,Spring Rich Client还提供了模型-视图-控制器(MVC)的设计模式,帮助开发者更好地组织和分离业务逻辑、用户界面和数据模型。 在Spring Rich Client中,开发者可以利用Spring的AOP特性实现切面编程,如事务...
- 在线模式下,Web Intelligence 通过 Web 浏览器或专门设计的 Rich Client 客户端应用来展示和分析数据。 - 用户可以通过 Web 浏览器直接访问部署在服务器上的报表,无需安装任何额外的客户端软件。 - 支持多种...
### WPF与XAML:重塑富客户端开发领域 #### 引言 随着Microsoft推出一系列创新技术,特别是XAML(可扩展...未来,随着WPF和XAML技术的不断发展和完善,我们有理由相信它们将在企业级应用开发中扮演越来越重要的角色。
#### 四、Smart Client设计原则与最佳实践 - **模块化设计:**确保应用程序结构清晰,易于维护。 - **离线模式支持:**设计时考虑离线情况下的用户体验。 - **数据同步机制:**实现高效的数据同步策略,保证数据...
JavaOne不仅涵盖企业级Java、移动开发、云计算、物联网(IoT)等领域,还深入到JavaFX、JavaME、JavaSE(标准版)和JavaEE(企业版)等技术主题。 【在JavaOne中讨论RCP】: 在JavaOne大会上讨论RCP,意味着可能涉及...
- **客户端**:采用胖客户端(Rich Client)模式,用户可在浏览器中进行工作流程图的可视化编辑。 - **数据传输**:客户端通过XMLHttpRequest向服务器发送请求,服务器以XML文档形式响应数据。 #### Java服务器端...
RCP(Rich Client Platform)程序设计是面向桌面应用开发的一种技术,主要由Eclipse基金会提供。RCP基于Java平台,允许开发者构建...RCP程序设计不仅适用于开发企业级应用,也适合那些希望打造自定义桌面环境的开发者。
SWT (Standard Widget Toolkit)、JFace 和 RCP (Rich Client Platform) 是 Java 开发桌面应用程序的重要工具包,尤其在企业级应用开发中占据一席之地。这些技术都是由 Eclipse 基金会提供,与 JavaFX 和 Swing 相比...
通常,源码分析包括对类结构、函数逻辑、设计模式等方面的探讨,有助于提升开发者解决问题的能力和代码质量。 其次,"工具"标签可能意味着Rap框架被作为一个开发工具来使用,博主可能分享了如何集成Rap到项目中,...
Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它基于Java,利用Eclipse IDE的灵活性和可...学习并掌握Eclipse RCP,不仅可以提升开发效率,还能为构建复杂的企业级应用打下坚实基础。
- - **客户端**:使用富客户端(Rich Client)模式,用户可以在浏览器中进行工作流程图的可视化编辑。 #### 三、技术规范 - **服务器端技术** - 使用Spring框架,提供AOP(面向切面编程)、Web MVC(模型-视图-...
Eclipse Rich Client Platform (RCP) 是一个框架,用于构建桌面应用程序,它提供了丰富的用户体验,拥有独立的计算和存储能力。RCP 的历史可以追溯到 Visual Basic 和 Delphi 等早期的富客户端平台,但现在它主要与 ...
2. **JFace进阶**:讲解JFace如何构建数据驱动的用户界面,如视图、表单、对话框等,并演示如何使用JFace的模型-视图-控制器(MVC)设计模式提高代码可维护性。 3. **RCP(Rich Client Platform)开发**:Eclipse ...
Java RCP(Rich Client Platform)是Oracle公司推出的用于构建桌面应用程序的一种框架,它基于Java Swing技术,提供了丰富的用户界面和强大的功能,使得开发者能够快速创建出具有专业外观和功能的桌面应用。...
此外,书中还会涵盖如何开发自己的Eclipse插件,这对于想要为Eclipse社区贡献代码或者构建企业级定制化开发环境的开发者非常有用。 在编程支持方面,书中的内容涵盖了Java开发的各个方面,如代码自动完成、调试、...
Java组态工具开发是利用Java技术构建可配置...总的来说,通过学习"java组态工具+RCP开发+GEF开发",你可以构建出功能强大、易于定制的桌面应用,这不仅对个人技能提升有极大帮助,也是企业级软件开发中的重要技能之一。
SWT是一个底层的GUI库,直接与操作系统进行交互,而JFace则在其之上进行了抽象,提供了更多的面向对象的设计模式,如数据绑定、事件处理和视图管理等,使得开发人员能够更加专注于业务逻辑,而不是底层的GUI实现细节...