[英]Where should reside the logic to assemble the domain object from DAO?
我在這里閱讀了幾乎所有問題,並在www上閱讀了許多相關的論據,但我仍然不確定是否要理解這一點,並且可能我錯過了其他人顯而易見的內容,因為我認為這很普遍情況...
拜托,請原諒我糟糕的英語和混亂的術語,但是我對DAO與存儲庫的差異/優勢/不足並不真正感興趣,我認為這不會改變問題的“核心”,但也許我錯了。
顯然,該示例太簡單了,每個解決方案都容易過大,但請以這為更大系統的“案例”。
假設您必須構建一個應用程序來建議推銷員與他們聯系。
每位准客戶都有一些“文本”數據(即姓名,性別,生日,地址,電話號碼,電子郵件等),一張照片以及他/她與其他人和賣方互動的一些歷史記錄。
文本數據駐留在Mysql表(人)上,文件系統中某處的照片上,有人已經發布了服務,這些服務返回給銷售員的潛在潛在聯系人列表,並給出每個潛在買家的得分。
我可能會得到以下結果:
域對象人,帶有名稱,電話號碼,地址,電子郵件和照片。 所有屬性的設置器和獲取器,以及方法getScore()。
兩個DAO,一個用於mysql表,另一個用於文件系統。
用於獲取給定業務員(應用程序的用戶,不在此示例范圍內)的潛在客戶列表的服務。
我不清楚的是:
域對象中的getScore()方法可以直接在服務層中調用服務嗎? 如果沒有,為什么?
對於來自不同DAO的數據,我是否需要單獨的DTO?
如果是這樣,我需要某種管理器或“超級” DAO,它們具有有關如何組合這兩條信息的邏輯(即從mysql DAO獲取URI,檢索文件,加載圖片)? 它應該駐留在數據層還是服務層? (在我看來,就應該存儲數據而言,它應該保留在數據層中)。
管理器或“超級DAO”的輸出應該是另一個DTO,還是可以直接是域對象?
如果是DTO,我是否需要一個服務來調用經理/超級DAO並建立域對象(在這種情況下,我認為該服務會將分數“添加”到域對象)?
我知道這是一個明確的問題,但是我無法弄清楚如何設計解決方案。
答案的起點:
getScore()
方法應該屬於服務而不屬於域對象 簡而言之(我認為)
允許從下到上使用,即。 服務可以使用DAO,但不能使用其他方法來減輕更改的可能性(例如:數據庫后端更改=> DAO已更新,僅此而已)
=>社區Wiki
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.