DAO调用DAO,DAO调用服务还是SQL加入?

DAO call DAO, DAO call service or SQL join?

所以我正在写一个个人项目来学习网络编程,我遇到了 DAO 模式。我构建了一些 classes(模型)并且像几乎所有程序一样,它们是嵌套的(例如:class Payment 引用了 Author 实例)。 仅供参考,我没有使用任何映射器(将在以后的迭代中添加它们,我使用的是 JDBC,而不是 JPA)。

我的问题是:

当我创建 PaymentJdbcDao 时,我有一个方法 return 一些付款,但为了从数据库存储的对象创建此付款,我还必须联系作者(存储在单独的 table).

我是否应该从 PaymentJdbcDao 调用 UserJdbcDao 以获得付款作者,我是否应该使用连接更改查询以从两个实体检索字段,PaymentJdbcDao 是否应该调用 UserService(我认为这不好因为服务位于 daos 之上的层上),或者我应该将作者引用作为对象删除并只保留对 author_id?

的引用

abobe 中哪种方法更适合实现此目的?或者还有其他更好的做法吗?

谢谢。

我调用我的 DAO (DataAccessObjects) "Repositories"。

Spring Data JPA 也在这样做。

所以我会创建一个 UserRepository 和一个 PaymentRepository。

存储库可以被其他存储库或服务调用。

存储库不应调用服务。

UI -> 服务 -> 存储库。

您的 PaymentRepository 可以 return 一个像这样的实体

public class PaymentEntity{
    private long id;
    private DateTime dateTime;
    private UserEntity user;
}

您的 UserRepository 可以 return 一个像这样的实体

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 以获取所有用户付款

希望能帮到你