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

时间:2018-06-09 14:28:01

标签: java design-patterns dao

我很难理解存储库模式。

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

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

例如,Customer可以有多个Address个,CustomerAddress之间存在识别关系

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应该有两个单独的存储库吗?

如果涉及查找表(例如A Book具有Owner非识别关系),这样的存储库结构应如何?< / p>

1 个答案:

答案 0 :(得分:1)

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

  

但是,如果我没有使用任何像Hibernate这样的持久性框架,那么   我应该把逻辑保存这些对象到数据库吗?应该吗   是一个单独的数据访问层?

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

  

当一个对象包含对另一个对象的引用时会发生什么?   客户和地址应该有两个单独的存储库吗?

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