第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么存儲庫不應(yīng)該返回 DTO

為什么存儲庫不應(yīng)該返回 DTO

PHP
慕少森 2022-12-23 13:09:21
閱讀了很多人們說我應(yīng)該返回領(lǐng)域模型的文章……但這會破壞我存儲庫的整個想法。我正在使用 laravel Eloquent 模型(如果我是正確的話 - 域模型)。我有存儲庫,所以如果我決定切換到 Doctrine,我可以在服務(wù)提供商中全部交換。但是,如果我將返回一個域模型實例(在本例中為 Eloquent 模型),那將毫無意義。我需要從存儲庫返回相同的結(jié)果,而 DTO 似乎正是我所需要的......有人可以解釋我為什么錯了嗎?
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻1835條經(jīng)驗 獲得超7個贊

什么是什么

首先,我想對您使用的術(shù)語進行解釋。

DTO(數(shù)據(jù)傳輸對象)

  • 通常是具有公共屬性的 PHP 類

  • 只負(fù)責(zé)承載數(shù)據(jù)

  • 不不驗證數(shù)據(jù)

  • 不知道任何特定于實現(xiàn)的事情(例如它綁定到哪個 ORM)

  • 通常用于在應(yīng)用程序的各個部分之間傳遞數(shù)據(jù),而任何一部分都不知道另一部分的實現(xiàn)

領(lǐng)域模型

  • 通常是具有私有屬性的 PHP 類

  • 應(yīng)該只包含有效數(shù)據(jù)

  • 驗證任何更改都會導(dǎo)致有效狀態(tài)

  • 不知道任何特定于實現(xiàn)的事情(例如它綁定到哪個 ORM)

資料庫

  • 只負(fù)責(zé)存儲和檢索數(shù)據(jù)

  • 知道它的實現(xiàn)(例如它綁定到哪個 ORM)

  • 不負(fù)責(zé)返回有效數(shù)據(jù)

這對您的情況意味著什么

答案實際上取決于您在分擔(dān)責(zé)任方面的想法有多純粹。

如果您與純粹主義者交談,他們會說 Eloquent 模型不是 DTO,它們也不是域模型。存儲庫將返回一個雄辯的模型,該模型將映射到域模型。然后可以修改該域模型或?qū)⑵滢D(zhuǎn)換為可用于讀取數(shù)據(jù)的 DTO。在這種情況下,職責(zé)以擁有更多代碼為代價被分離。

如果您與實用主義者交談,他們會說 Eloquent 模型是 DTO 和域模型(有時甚至是存儲庫)。由于 Eloquent 模型負(fù)責(zé)存儲數(shù)據(jù)、檢索數(shù)據(jù)、修改數(shù)據(jù)并將此數(shù)據(jù)傳遞給應(yīng)用程序的其他部分。

最后,一切都與偏好有關(guān)。你可以純粹,你可以務(wù)實,你甚至可以在兩者之間做出選擇。這完全取決于你是一個多么先進的編碼器,項目有多大,它應(yīng)該如何維護,必須進行多快的更改等。

時間差

存儲庫可以返回 DTO 或域模型,具體取決于您在分離職責(zé)方面的想法。


查看完整回答
反對 回復(fù) 2022-12-23
  • 1 回答
  • 0 關(guān)注
  • 123 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號