2013-03-08 95 views
1

我想要使用一个业务对象(TO)进行操作。然而,数据这包括来自2个不同的数据源:将来自两个DAO的数据合并为一个TO

  • 应用程序的数据库,将通过JPA和一个实体
  • 旧系统的数据进行访问,这将通过一个WebService
  • 访问

在这个项目的后期阶段,所有的数据将被转移到应用程序的数据库。因此,我希望有一个业务对象(TO)来表示所有这些数据。

我的做法是下列之一:

1)拥有的实体DAO和另一DAO的旧系统。然后在这些之上还有另一个DAO,它将创建我想在其他应用程序中使用的业务对象。

2)只有一个DAO,将检索实体和一些从旧系统中的一些数据。

你怎么看这个想法?

回答

2

您需要在Dao's(实体,旧系统)之上引入服务层,并将所有Dao's注入(假设您使用的是Spring)到服务中。选项1更好,但只需在服务中创建两个Dao并创建将在整个应用程序中使用的业务传输对象。 工作流将是UI - > PersonService - > Dao1(应用程序数据库),Dao2(Webservice)。 PersonService将具有必要的业务逻辑(如果有的话)。另外,您可以在PersonService中创建一个PersonDaoFactory,以抽象Dao内部Service层的创建。因此,在年底,我们将有来自控制器或UI层类似下面(一种假设的情况,因为我不知道该域模型):

Person person = personService.findUserById(personId); 
Product product = person.getProducts(); 
Comment comment = person.getComments(); 
Friends friends = person.getFriends(); 

此外,想到一个问题,很多DAO解决和一个大DAO不会解决。

+0

不幸的是,Spring不会被使用。 – moviaa 2013-03-08 19:49:54

+0

已经更新我的回答上面 – 2013-03-08 19:56:39

+0

好的,所以我会在我的数据访问层(DAO:s)之上有一个服务层?如果我有一个PersonEntity和一个PersonEntityDAO(用于应用程序的数据)和一个PersonOldSystemDAO,那么如果不是DAO,顶部的对象应该被调用吗? – moviaa 2013-03-08 19:56:58

0

漂亮很难回答,如果没有数据的想法。 我会做的就是有两个DAO的:一个是DB和一个用于web服务(我会称之为更比一个DAO服务),并使用后者属性添加到实体通过JPA DAO检索。 我稍后将放弃webservice的服务/ dao并发展JPA dao。

以及由对方回答说,你需要这个抽象通过论文DAO的从服务。 因此,您的第一个解决方案对我来说听起来更好。