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

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

為什么存儲庫不應該返回 DTO

為什么存儲庫不應該返回 DTO

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

1 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

什么是什么

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

DTO(數據傳輸對象)

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

  • 只負責承載數據

  • 不不驗證數據

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

  • 通常用于在應用程序的各個部分之間傳遞數據,而任何一部分都不知道另一部分的實現

領域模型

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

  • 應該只包含有效數據

  • 驗證任何更改都會導致有效狀態

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

資料庫

  • 只負責存儲和檢索數據

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

  • 不負責返回有效數據

這對您的情況意味著什么

答案實際上取決于您在分擔責任方面的想法有多純粹。

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

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

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

時間差

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


查看完整回答
反對 回復 2022-12-23
  • 1 回答
  • 0 關注
  • 130 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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