java - 存储库模式 - 复合对象的 Java 示例

标签 java design-patterns dao

我很难理解存储库模式。

我无法理解的一件事是,大多数教程建议的是,存储库应该像内存数据库一样工作,即它们应该有 add()remove() , find() 等方法。但是,如果我没有使用任何持久性框架,如 Hibernate,我应该将这些对象保存到数据库的逻辑放在哪里?是否应该有一个单独的数据访问层

当一个对象包含对另一个对象的引用时会发生什么?

例如,Customer 可以有多个 Address(es) 并且 Customer 之间存在标识关系> 和 地址

public class Customer {
    private String firstName;
    private String lastName;

    private List<Address> addresses; // one or more addresses


    // ...

}

public class Address {
    protected String street;  
    protected String city;

    // ...
}

CustomerAddress 是否应该有两个单独的存储库?

如果涉及查找表(例如,Book 具有 Owner,处于非标识关系)?

最佳答案

对我来说,存储库模式只是一个对象,负责从底层存储中持久化和检索域对象。

But if I'm not using any persistence framework like Hibernate, where should I put the logic to save these objects to database? Should there be a separate data access layer?

我不认为拥有另一个数据访问层有任何显着好处,因为存储库已经负责持久化和访问数据。只需将这些逻辑放在存储库中即可。首先保持简单,直到您看到拥有额外数据访问层的好处。

What happens when a object contains reference to another object? Should there be two separate repositories for Customer and Address?

是的。我将为客户和地址设置单独的存储库。根据您使用的持久化技术,您可以将客户及其地址放在一起(例如,在 JDBC 案例中使用简单的 JOIN)。或者,您可以通过将 AddressRepository 注入(inject) CustomerRepository 来重用它,以帮助您获取客户的地址。

关于java - 存储库模式 - 复合对象的 Java 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775294/

相关文章:

java - 为数据库以外的数据源设计 DAO

android - 数据库查询在尝试获取 LiveData 时抛出 KotlinNullPointerException

java - 从 Arduino 到处理的完整串行字符串

Python:使用给定的参数集调用对象的所有方法

java - 在一个 Olingo 属性中显示多个值

unit-testing - 由于编写可测试代码而导致工厂过多

java - 抽象类和接口(interface)在一起?

java - DAO架构的必要性是什么

java - 从常规方法创建递归方法

java - 有人可以向我解释间接堆/间接优先级队列的概念吗?