1

我有一种情况,我想使用一个业务对象 (TO)。但是,此 TO 包含的数据来自 2 个不同的数据源:

  • 应用程序的数据库,将通过 JPA 和一个实体访问
  • 旧系统的数据,将通过 Web 服务访问

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

我的方法是以下之一:

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

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

您对此有何看法?

4

2 回答 2

2

您需要在(实体,旧系统)之上引入一个服务层Dao's并将所有内容注入(假设您正在使用SpringDao's服务中。选项 1 更好,但只需在服务中创建两个 Dao,并创建将在整个应用程序中使用的业务传输对象。工作流程是 UI -> PersonService -> Dao1 (app db), 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 无法解决的问题。

于 2013-03-08T19:46:49.370 回答
0

如果不了解数据,很难回答这个问题。我要做的是有两个dao:一个用于db,一个用于webservice(我将其称为服务而不是dao)并使用后者向JPA dao检索的实体添加属性。我稍后会放弃 webservice 的 service/dao 并发展 JPA dao。

正如另一个答案所述,您需要通过使用服务中的这些 dao 来抽象这一点。因此,您的第一个解决方案对我来说听起来更好。

于 2013-03-08T19:47:18.090 回答