2010-08-11 27 views
4

我有一个Java Web应用程序,它具有一个“断开连接”的Java Swing桌面应用程序。使用桌面应用程序用户连接到互联网并从服务器下载他们需要的数据。他们可以断开连接并脱机使用应用程序。当他们重新连接到互联网时,他们可以将他们的数据同步回服务器。什么是分离可以在线和离线使用的应用程序层的好策略?

服务器本身是一个Java EE Web应用程序,桌面应用程序是Web应用程序的有限功能版本。到目前为止,所有业务逻辑和数据访问代码都是针对每个应用程序单独编码的每个应用程序的数据存储都不相同(Web是SQL Server,桌面是Serialized对象)。一些新的要求涉及到两个应用程序的大量开发。由于功能相同,因此我希望对数据访问代码和业务逻辑进行分层,以便我可以轻松地在两个应用程序中重复使用它。

我的计划是要做到以下几点。

1)创建一个DAO库(JPA)

交换机我的DAO(目前JDBC)使用Java持久性API。这样,我可以开始在桌面应用程序上使用RDBMS,如derby,sql express或类似的东西,并重新使用entites和DAO代码来完成所有数据库操作。我可以将它捆绑到一个类库中,并为Web和桌面使用相同的库。

2)创建的POJO中实现业务逻辑

的Web应用程序是用支柱2.我将采取所有的逻辑在我的Action类图书馆,但它。用业务逻辑创建一个jar类库。我可以将这个lib添加到我的web和桌面项目中。然后我可以从我的struts动作和桌面应用程序调用POJO。

我假设JPA将负责复制数据访问代码,并将业务逻辑(大部分是dao调用)放在单独的库中,将负责复制业务逻辑。

所以我的问题是:什么是一个好的策略分离图层可以在线和离线使用的应用程序?

如果您有任何关于实现这一点的建议,请在我开始此项目或任何可能帮助我的框架时通知我。

回答

2

对于可以在线和离线使用的应用程序分离图层的策略是什么?

那么,你的计划看起来不错,从一个高层次的角度来看,肯定会简化你的应用程序的维护。我没有太多补充:创建JPA实体,一个服务层,如果您觉得需要,可以使用DAO层。然后在两个应用程序中使用这些部件,并使用不同的JPA设置。

这里有一些其他注意事项:

  • 我会去的桌面(德比)在一个完整的Java数据库,它会更容易管理其生命周期。
  • Spring将提供良好的整体支持(对于分层,为declarative transaction management)。
  • JPA不提供合并或数据库的任何设施,你必须实现一个自己和处理类似冲突的变化痛苦的事情,等

我真的甚至考虑跳过DAO并直接从服务层访问JPA的EntityManager。有些人可能不会同意这一点,但事实是,EntityManager已经实现了Domain Store模式,它几乎完成了DAO模式的功能,并且没有太多的价值来屏蔽DAO。

+0

只是为了澄清,当你直接从服务层说你的意思,而不是从[Web - >服务 - > Dao - > DB]调用时,我使用[Web服务 - > DB] – Allan 2010-08-13 11:34:52

+1

@alzoid:我的意思是[Web - > Service - > EntityManager]而不是[Web - > Service - > DAO(EntityManager)]# – 2010-08-13 11:56:21

+0

#1:是的,但是如何测试何时注入没有挂钩? – 2012-07-16 16:59:22

相关问题