亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號