And*_*rea 36 java model-view-controller mvp mvvm
我将启动一个Java项目来开发桌面应用程序.什么用作表示层模式(MVC,MVP,MVVM或....)?
......如果有可能,用一些工作小例子...... :-)
Pas*_*ent 52
其实,你在寻找最终的帖子是这样回答 这个答案从卡斯滕Lentzsch共同领导(的JGoodies数据名望)在秋千框架和最佳实践 摇摆框架和最佳实践主题.
你好,
我已经写了几年Swing应用程序很多人都觉得优雅.我教导开发人员有效地使用Swing:如何构建和组装应用程序,如何绑定和验证日期,以及如何在Swing中查找,设计,布局和实现精心设计的屏幕.
我说在网上没有Swing的"最佳实践".我怀疑任何人都可以提供"最佳"实践,因为这需要Swing开发人员和解决方案提供商之间就方法进行讨论,技术上有效,易于理解和使用.此外,最佳实践可以解释谁可以达到什么样的结果质量,他们会描述生产时间和生产成本; 但我永远无法在网上或在Swing书中找到这些信息.
在我看来,缺乏良好实践和信息如何构建Swing应用程序是开发人员在使用Swing时面临的最大障碍.我工作的大多数开发人员在寻找设计,实现布局,构建面板,绑定数据,处理事件以及安排不同的代码部分和代码层方面都很慢.我见过很多Swing应用程序很糟糕; 除了他们糟糕的视觉设计,他们很难理解,即使很小的变化也会花费很多.通常开发人员不知道在哪里放置什么代码?,如何分离关注点?如何将事物联系在一起?,如何使用Actions?,如何启动应用程序?以及如何存储和恢复UI状态?大多数开发人员缺乏遵循的指导
但我发现普通的开发人员可以很好地使用Swing,如果只是手动 - 大约需要3到10天.几乎所有问题都可以通过代码,库,应用程序架构,模式,通用编程实践,精心设计的示例,教程等来解决或解决.我教授围绕3层架构构建的Swing开发流程分离域,工具和表示层,并基于高效的布局系统.尽管大多数部件都是以编程方式完成的,但开发人员可以快速获得结果,并且代码和可视化设 这可以大大提高开发人员的工作效率 - 在某种程度上,Swing工作只占项目工作的一小部分.
所以,你可以做什么?我强烈建议研究Martin Fowler的草案,了解更多"企业应用程序架构模式".我发现这些模式在Swing和Swing团队中运行得非常好 - 即使是对Swing和Swing架构不熟悉的开发人员也是如此.我首先选择以下模式:"Presentation Model","Separated Domain"和"Separated Presentation".我个人赞成使用Model-View-Presenter模式(MVP)的Presentation Model(Smalltalkers的应用程序模型).然而,MVP是一个真正的,研究得很好的选择.
Fowler的模式可以与3客户端层结构相结合,可以适用于中等规模的Swing应用程序.它由域层,表示层和中介模型层组成.我在数据绑定演示中概述了这种架构.基于MVP的应用程序也可以在这3个客户端层中构建.
Swing应用程序的一个关键任务是数据绑定:如何将域对象和域对象属性连接到Swing组件.基本上,您可以来回复制数据,或者从域对象到UI组件构建适配器链.复制方法易于理解,并且通常是那些刚接触Swing或数据绑定的人的首选; 我会说这是一个不错的选择.另一方面,复制使得同步视图变得更加困难.适配器链和自动或半自动更新可以显着减少将域数据绑定到UI所需的代码量.缺点是,这种方法更难理解.正如您所指出的,Swing没有为可重用且灵活的模型提供很好的抽象,可用于绑定文本字段; Document接口不适合通用数据访问.有一些库可用,提供ValueModel接口,旨在为单值数据添加通用,强大且灵活的模型:字符串,布尔值,数字,日期等.
我不知道Swing书解释了真正的Swing应用程序开发过程.理想情况下,这样一本书将结合上面提到的模式,体系结构和数据绑定技术,并将描述如何在Swing中实现它.无论如何,有一个10年前的Smalltalk应用程序开发过程的文档就是这样做的.Oracle的JClient体系结构和文档并不完整,但对于Java开发人员来说可能更容易阅读.我提供了有关Fowler模式的数据绑定的演示文稿,这些模式的3层体系结构和Swing实现以及自动数据绑定.我的Binding库的教程资源可以帮助您获得适配器链和ValueModel接口.
一旦选择了架构和桌面模式集,就应该解决以下更基本的Swing任务:1)通过选择适合您的目标平台集的专业外观来改善外观,2)选择可以帮助您的布局系统快速构建设计良好且一致的屏幕,3)选择数据验证解决方案,4)为日常Swing任务获取一袋解决方案.
有几个项目概述了Swing架构,解决了数据绑定和典型的Swing任务,例如:Sun的JDNC,Oracle的JClient/ADF,Spring RCP,NetBeans平台.我提供了一个基于开源JGoodies库的商业Swing解决方案套件,并为所有公共JGoodies工具和演示添加了一包解决方案和资源.这些来源旨在解释如何将上述所有问题联系在一起.
让我添加关于所谓的"MVC"框架的标准警告.Swing不使用MVC,它使用修改后的模式.MVC经常被错误引用和误解 - 特别是在Swing的背景下.此外,MVC适用于UI组件,而不适用于应用程序.因此,我建议寻找反映和使用Swing架构的概念,解决方案和库,而不是MVC.
MVC模式的发明者社区在1993年左右引入了ApplicationModel(现在称为Presentation Model); MVP跟进了一会儿.在我看来,这两种模式对于Swing比MVC更有用.最近,将Presentation Model模式带给更多受众的环境转移到了新的架构:"Pollock".有兴趣的读者可以谷歌看看它与经常与Presentation Models结合使用的适配器链有何不同.
最后但并非最不重要的个人陈述.我可以使用Swing比使用之前使用的其他工具包或框架更好地工作; 我可以用更少的代码做更多的事情,代码结构更好,维护更容易,并且我可以快速获得结果.
希望这可以帮助.最诚挚的问候,Karsten Lentzsch
参考文献:Fowler的进一步模式 - http://martinfowler.com/eaaDev 数据绑定演示 - http://www.jgoodies.com/articles/ Smalltalk app dev进程 - http://www.cincom.com/downloads/pdf/ AppDevGuide.pdf MVP模式文档 - http://www.object-arts.com/EducationCentre/Patterns/MVP.htm Sun的JDNC项目主页 - http://jdnc.dev.java.net/ Oracle的ADF常见问题 - http:/ /www.oracle.com/technology/products/jdev/htdocs/905/adffaq_otn.html Spring RCP项目主页 - http://www.springframework.org/spring-rcp.html NetBeans平台主页 - http:// www. netbeans.org/products/platform/ JGoodies Swing Suite -http://www.jgoodies.com/products/index.html
如果你不认识Karsten和JGoodies,那么请相信我,这家伙真的知道他在说什么.我热烈建议仔细阅读他的回答和他发布的材料作为参考.更具体地说,请务必检查他的桌面模式和数据绑定演示文稿.令人惊讶的是,我更喜欢旧版本和新版本.
让我引用他关于MVC与MVP的幻灯片:
然后从摘要中:
但是,我不能比卡斯滕更好地解释这一点,我最多可以解释他.所以只要读他!
也许可以看看用于学习的Desktop Java演示 (更确切地说是Scott Violet的答案).
| 归档时间: |
|
| 查看次数: |
18706 次 |
| 最近记录: |