如何组织我的代码以便能够使用两种不同的视图类型?

时间:2010-04-17 16:52:43

标签: java swing

我已经设置了我的模型,现在我想构建应用程序,以便我可以轻松地在swing视图和html视图之间切换(2个不同版本)。

你可以向我推荐任何让我这样做的图书馆吗?还是我自己做的控制器/视图架构?

编辑: java中的MVC架构是我的问题,如果我使用SWING我的控制器调用View类的方法来显示结果,而(至少在python django中) controller返回一个“View”类(有些东西负责将生成的视图生根到用户,如果它已经存在,可能直接从缓存中获取视图。)这是实现MVC的两种不同方式。我不知道如何用Java向用户发送html视图(我怀疑有不同的方法)这就是为什么我要问这个问题,以便在Java中获得MVC架构背后的一般概念,因为它可能有自己的ideomatic /参考接口来完成这项工作。

6 个答案:

答案 0 :(得分:4)

我不知道任何图书馆,但我可以建议一种架构。

我建议使用(至少)三个项目:一个用于核心功能,一个用于HTML视图,一个用于Swing。视图取决于核心功能项目,但这两个视图彼此不了解。

在两个视图项目中都需要某种Factory,它可以使用核心项目中的数据实例化所选视图的类 - 如果要从核心项目处理此实例化,那么您将需要一个通用接口和某种动态实例化,或者在两个项目中的同一个包中使用相同的类。

如果你选择这样的解决方案,你不能同时使用这两种观点(至少很容易:))。

OSGi及其更新的类加载器为这些场景提供了支持,其中Java项目是OSGi包,它们的依赖关系是明确设置的,框架可以处理这些。您可以使用服务来描述视图工厂,然后您可以以正式的,明确定义的方式将这些部分分离。

我希望基本想法足够清楚。

答案 1 :(得分:4)

Oracle的Application Development Framework(ADF)正是这样做的。

您开发应用程序模块,数据库实体和视图对象。然后,您可以将它们拖放到页面或框架上。这允许您开发一次业务逻辑并保持处理每个视图的逻辑。

JDeveloper 11g(使用ADF开发软件的IDE)可以很好地处理AJAX。它还允许您以声明方式创建可通过拖放重用的自定义组件。

应用程序的可视化布局在某种程度上通过自定义标记进行抽象,但是您不能创建网页然后单击按钮来创建相应的JPanel。 (据我所知。)

答案 2 :(得分:3)

我不确定任何图书馆能达到你想要的目标。毕竟,每种技术(swing和html)都需要不同的“视图”层代码。这里重要的是将所有业务逻辑保留在视图层之外,并将其保存在控制层中,然后由每个视图使用(也称为MVC架构,请参阅this link for more infoSun's more detailed example。< / p>

基本上,这将归结为您在维护责任分离方面的奉献精神,这将使您能够从代码中获得最多的重用。

答案 3 :(得分:3)

我搜索了'swing'和'ajax' - 因为我知道eclipse RAP项目,这个丰富的ajax平台如果你没有专注于摇摆,那将有所帮助 - 这篇博文看起来很有希望:http://www.javalobby.org/java/forums/t101605.html

'RAP'的想法是拥有一个GUI代码库,并为独立客户端应用程序或Web应用程序(ajax)构建它。该博客讨论了一种不同的方法:构建一个swing应用程序并将其转换为Web应用程序。

希望它有所帮助! (希望我的问题是对的;))

答案 4 :(得分:2)

MVC,如果遵循点可以做到这一点!保持所有业务和模型层分离,然后让struts / spring控制器决定视图。 保持单独的swing和html代码。 关键是要从表示层中删除所有可能的业务逻辑,并确保您的业务层独立于表示层。

答案 5 :(得分:-1)

另一种选择是使用Swing来显示html。如果您使用JEditorPane or JTextPane并只显示html。缺点是你不能使用这种方法做非常复杂的html。您也可以考虑在应用中使用浏览器。虽然我没有尝试过,但有几种可能性: