java - 将两个 DAO 中的数据合并到一个 TO 中

标签 java web-services dao dto

我遇到了一种情况,我想使用一个业务对象 (TO)。然而,该 TO 包含的数据来自 2 个不同的数据源:

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

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

我的方法是以下之一:

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

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

你对此有何看法?

最佳答案

您需要在 Dao (实体、旧系统)之上引入一个服务层,并注入(inject)(假设您使用的是 Spring)所有 Dao 进入服务。选项 1 更好,但只需在服务内创建两个 Dao,并创建将在整个应用程序中使用的业务传输对象。 工作流程为 UI -> PersonService -> Dao1 (app db), Dao2(Webservice)。 PersonService 将具有必要的业务逻辑(如果有)。另外,你可以在PersonService内部创建一个PersonDaoFactory来抽象Dao内部Service层的创建。因此,最后我们将从 Controller 或 UI 层得到如下所示的内容(假设场景,因为我不知道域模型):

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

此外,想一想许多 DAO 可以解决而一个大 DAO 无法解决的问题。

关于java - 将两个 DAO 中的数据合并到一个 TO 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301960/

相关文章:

java - 单个阵列是否比 2 个不同的阵列快?

java - 使用 Jnotify 忽略文件修改

web-services - 免费访问地理/行业数据?

java - 使用 DAO 和 Web 服务的数据库插入方法的 Junit 测试用例

mongodb - 避免 Clojure 应用程序的 DAO 层中的全局状态

java - 为什么我需要一个存储库和一个服务+契约(Contract)

java - 如何在 Ant JUnit Task 中设置额外的 Java Logger FileHandler?

java - 无法从更新的 org.json 包中导入类

java - 解码为soap webservice 中的通用类型 xml 中的任何类型

存储库或 DAO : read data from multiple tables