存储库模式 - Java 复合对象示例
Repository Pattern - Java example for composite objects
我很难理解存储库模式。
我无法理解的一件事是,大多数教程建议的是存储库应该像内存数据库一样工作,即它们应该有 add()
、remove()
, find()
等方法。但是如果我没有使用像 Hibernate
这样的任何持久性框架,我应该把将这些对象保存到数据库的逻辑放在哪里?是否应该有一个单独的数据访问层?
当一个对象包含对另一个对象的引用时会发生什么?
例如,一个Customer
可以有多个Address
(es)并且在Customer
和[=之间存在识别关系 17=]
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;
// ...
}
Customer
和 Address
是否应该有两个单独的存储库?
如果涉及 table 查找(例如 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
注入 CustomerRepository
来重用它,以帮助您获取客户的地址。
我很难理解存储库模式。
我无法理解的一件事是,大多数教程建议的是存储库应该像内存数据库一样工作,即它们应该有 add()
、remove()
, find()
等方法。但是如果我没有使用像 Hibernate
这样的任何持久性框架,我应该把将这些对象保存到数据库的逻辑放在哪里?是否应该有一个单独的数据访问层?
当一个对象包含对另一个对象的引用时会发生什么?
例如,一个Customer
可以有多个Address
(es)并且在Customer
和[=之间存在识别关系 17=]
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;
// ...
}
Customer
和 Address
是否应该有两个单独的存储库?
如果涉及 table 查找(例如 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
注入 CustomerRepository
来重用它,以帮助您获取客户的地址。