【发布时间】:2011-03-28 13:06:44
【问题描述】:
我有一个 Java Web 应用程序,它有一个“断开连接”的 Java Swing 桌面应用程序。使用桌面应用程序用户连接到互联网并从服务器下载他们需要的数据。他们可以断开连接并离线使用应用程序。当他们重新连接到互联网时,他们可以将数据同步回服务器。
服务器本身是一个 Java EE Web 应用程序,而桌面应用程序是该 Web 应用程序的有限功能版本。到目前为止,所有业务逻辑和数据访问代码都是为每个应用程序单独编码的。每个应用程序的数据存储都不同(Web 是 SQL Server,Desktop 是序列化对象)。一些新的要求涉及到两个应用程序的大量开发。由于功能相同,我想将数据访问代码和业务逻辑分层,以便我可以轻松地为两个应用程序重用它。
我的计划是做以下事情。
1) 创建 DAO 库 (JPA)
切换我的 DAO(当前为 JDBC)以使用 Java Persistence API。通过这种方式,我可以开始在桌面应用程序(如 derby、sql express 或类似的东西)上使用 RDBMS,并重用实体和 DAO 代码来执行所有数据库操作。我可以将它捆绑到一个类库中,并将同一个库用于 Web 和桌面。
2) 为业务逻辑创建库
Web 应用程序是用 struts 2 编写的。我将在我的 Action 类中使用所有逻辑,但它在 POJO 中。使用业务逻辑创建一个 jar 类库。我可以将 lib 添加到我的 Web 和桌面项目中。然后我可以从我的 struts 操作和我的桌面应用程序中调用 POJO。
我假设 JPA 将负责复制数据访问代码并将业务逻辑(大部分是 dao 调用)放在单独的库中将负责复制业务逻辑。
所以我的问题是:对于可以在线和离线使用的应用程序,分离层的好策略是什么?
如果您对以不同方式实现此目标有任何建议,请在我开始此项目时对我提出任何警告或任何可能对我有帮助的框架,请告诉我。
【问题讨论】:
标签: java swing web-applications jpa code-reuse