为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小唯快跑啊 2022-08-03 10:14:01
所以我正在写一个个人项目来学习Web编程,我遇到了DAO模式。我构建了一些类(模型),并且像几乎任何程序一样,它们是嵌套的(例如:类Payment具有对Author实例的引用)。仅供参考,我没有使用任何映射器(将在以后的迭代中添加它们,并且我使用的是JDBC,而不是JPA)。我的问题是这样的:当我创建PaymentJdbcDao时,我有一个方法将返回一些付款,但是为了从数据库存储对象创建此付款,我还必须联系作者(存储在单独的表中)。我应该从PaymentJdbcDao调用UserJdbcDao以获取付款的作者,我应该使用联接来更改查询以从两个实体中检索字段,PaymentJdbcDao是否应该调用UserService(我认为这不好,因为服务位于daos的层上),或者我应该删除作者引用作为对象并仅保留对author_id的引用?哪种abobe是实现这一目标的更合适的方法?还是其他更好的做法?
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

我将我的DAO(DataAccessObjects)称为“存储库”。


Spring Data JPA也在这样做。


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


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


服务永远不应由存储库调用。


UI ->服务 -> 存储库。


您的付款存储库可能会返回这样的实体


public class PaymentEntity{

    private long id;

    private DateTime dateTime;

    private UserEntity user;

}

您的用户存储库可能会返回这样的实体


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();

}

因此,您的付款存储库将致电用户存储库以获取您的付款。


您的用户存储库将调用付款存储库以获取所有用户的付款


我希望我能够帮助你


查看完整回答
反对 回复 2022-08-03
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信