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

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

DAO調用DAO,DAO調用服務還是SQL join?

DAO調用DAO,DAO調用服務還是SQL join?

呼啦一陣風 2022-07-27 20:18:43
所以我正在寫一個個人項目來學習網絡編程,我遇到了 DAO 模式。我已經構建了一些類(模型),并且像幾乎所有程序一樣,它們是嵌套的(例如:Payment 類具有對 Author 實例的引用)。僅供參考,我沒有使用任何映射器(將在以后的迭代中添加它們,我使用的是 JDBC,而不是 JPA)。我的問題是這樣的:當我創建 PaymentJdbcDao 時,我有一個方法會返回一些付款,但是為了從數據庫存儲的對象創建這個付款,我還必須到達作者(存儲在單獨的表中)。我是否應該從 PaymentJdbcDao 調用 UserJdbcDao 以獲取付款的作者,我是否應該使用聯接更改查詢以從兩個實體中檢索字段,如果 PaymentJdbcDao 調用 UserService(我認為這不好,因為服務已開啟daos 之上的層),還是應該將作者引用作為一個對象刪除,只保留對 author_id 的引用?上面哪一個是更合適的方法來實現這一點?或者還有其他更好的做法嗎?謝謝。
查看完整描述

1 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

我將我的 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 以獲取所有用戶付款


我希望我能幫助你


查看完整回答
反對 回復 2022-07-27
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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