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

Java 如何组织代码以便能够使用两种不同的视图类型?,java,swing,Java,Swing,我已经设置了我的模型,现在我想构建应用程序,这样我就可以轻松地在swing视图和html视图之间切换(两种不同的构建) 你能推荐给我任何一家允许我这样做的图书馆吗?还是让我自己来做的控制器/视图架构 编辑:java中的MVC架构是我的问题所在,如果我使用SWING我的控制器调用视图类的方法来显示结果,而(至少在python django中)控制器返回一个“视图”类(还有一些东西负责将生成的视图根指向用户,如果已经存在,可能直接从缓存中获取视图。)这是实现MVC的两种不同方法。我不知道如何使用Ja

我已经设置了我的模型,现在我想构建应用程序,这样我就可以轻松地在swing视图和html视图之间切换(两种不同的构建)

你能推荐给我任何一家允许我这样做的图书馆吗?还是让我自己来做的控制器/视图架构


编辑:java中的MVC架构是我的问题所在,如果我使用SWING我的控制器调用视图类的方法来显示结果,而(至少在python django中)控制器返回一个“视图”类(还有一些东西负责将生成的视图根指向用户,如果已经存在,可能直接从缓存中获取视图。)这是实现MVC的两种不同方法。我不知道如何使用Java将html视图发送给用户(我怀疑有不同的方法)这就是为什么我问这个问题是为了了解Java中MVC体系结构背后的总体思路,因为它可能有自己的表意/参考界面来完成这项工作。

我不确定是否有任何库能够实现您的愿望。毕竟,每种技术(swing和html)将需要不同的“视图”层代码。此处重要的是将所有业务逻辑排除在视图层之外,并将其保留在每个视图使用的控制层中(也称为MVC架构,请参阅或)


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

我在谷歌上搜索了“swing”和“ajax”——因为我知道eclipse RAP项目,这是一个丰富的ajax平台,如果您不专注于swing,它将有所帮助——而这篇博客文章看起来很有前景g:

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


希望能有帮助!(希望我答对了你的问题;)

我不知道有哪家图书馆,但我可以推荐一种架构

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

在两个视图项目中都需要某种类型的工厂,可以使用核心项目中的数据实例化所选视图的类-如果希望从核心项目中处理此实例化,则需要公共接口和某种类型的动态实例化,或者在中的同一包中使用相同的类两个项目都有

如果选择这样的解决方案,则不能同时使用两个视图(至少很容易:)

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

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

Oracle(ADF)就是这样做的

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

jdeveloper11g(使用ADF开发软件的IDE)可以很好地处理AJAX。它还允许您反向创建可通过拖放重用的自定义组件


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

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

另一个选项是只使用Swing显示html。如果您使用并仅显示html。缺点是您无法使用此方法生成非常复杂的html。你也可以考虑在你的应用程序中使用浏览器。以下是一些可能性,尽管我没有尝试过:


我不是在寻找一个让我只编写一次代码的库,因为我认为它的性能很差,但感谢您的提示。是否可以在没有IDE的情况下使用该框架?框架对IDE的约束程度如何?我可以滚动我自己的视图和/或模型吗?据我所知,JDeveloper与ADF紧密相连。虽然您可能可以使用Eclipse进行一些纯Java编码,但我认为这会很麻烦。这对我来说似乎是不可能的,但我将挖掘JDev功能。JDev 11本身就是一个相当不错的IDE。它有一些有趣的功能来检查代码(显示TODO区域、带有警告的类、未记录或未完成的Javadocs等等)。我最近问了一些不完全相同但相似的问题,我希望有一个唯一的代码库来同时针对Swing和GWT:感谢您的提示,我将遵循它。我计划为两个视图保留相同的控制器(或我这样命名的),并在视图中创建“路由”机制。@Wizardofods,您正在寻找类似的东西,但对于GWT?4年前,我也考虑过这一点。我不知道JVM的最新技术是什么,使用Chromium Embedded Framework for Java可能更好。光表使用webkit,我不知道实际如何使用。