我遇到了一种情况,我想使用一个业务对象 (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/