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 以获取所有用户付款
希望能帮到你
所以我正在写一个个人项目来学习网络编程,我遇到了 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 以获取所有用户付款
希望能帮到你