所以我正在编写一个个人项目来学习Web编程,我遇到了DAO模式。我构建了一些类(模型),几乎与任何程序一样,它们是嵌套的(例如:类Payment有对Author实例的引用)。仅供参考,我没有使用任何映射器(将在以后的迭代中添加它们,我使用的是JDBC,而不是JPA)。
我的问题是:
当我创建PaymentJdbcDao时,我有一个方法会返回一些Payment,但是为了从数据库存储对象创建这个支付,我必须也到达Author(存储在一个单独的表中)。
我应该从PaymentJdbcDao调用UserJdbcDao以获取付款的作者,如果我使用连接更改查询以从两个实体检索字段,如果PaymentJdbcDao调用UserService(我认为这不好,因为服务已打开)图层abobe daos),或者我应该删除作者参考作为对象,只是持有对author_id的引用?
以上哪一项是更合适的方法来实现这一目标?或者是其他任何更好的做法?
谢谢。
我将我的DAO(DataAccessObjects)称为“存储库”。
Spring Data JPA也在这样做。
所以我会创建一个UserRepository和一个PaymentRepository。
存储库可以由其他存储库或服务调用。
服务器永远不应该调用服务。
UI - >服务 - >存储库。
您的PaymentRepository可以返回这样的实体
public class PaymentEntity{
private long id;
private DateTime dateTime;
private UserEntity user;
}
您的UserRepository可以返回这样的实体
public class UserEntity{
private long id;
private DateTime lastLogin;
private List<PaymentEntity> payments;
}
您的存储库可能看起来像这样。
public interface PaymentRepository{
PaymentEntity getPaymentById(long id);
List<PaymentEntity> getAllPayments();
}
public interface UserRepository{
UserEntity getUserById(long id);
List<UserEntity> getAllUsers();
}
因此,您的PaymentRepository将调用UserRepository以获取您的付款用户。
并且您的UserRepository将调用PaymentRepository以获取所有用户的付款
我希望我能帮到你