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

qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
什么是什么
首先,我想對您使用的術語進行解釋。
DTO(數據傳輸對象)
通常是具有公共屬性的 PHP 類
只負責承載數據
不不驗證數據
不知道任何特定于實現的事情(例如它綁定到哪個 ORM)
通常用于在應用程序的各個部分之間傳遞數據,而任何一部分都不知道另一部分的實現
領域模型
通常是具有私有屬性的 PHP 類
應該只包含有效數據
驗證任何更改都會導致有效狀態
不知道任何特定于實現的事情(例如它綁定到哪個 ORM)
資料庫
只負責存儲和檢索數據
知道它的實現(例如它綁定到哪個 ORM)
不負責返回有效數據
這對您的情況意味著什么
答案實際上取決于您在分擔責任方面的想法有多純粹。
如果您與純粹主義者交談,他們會說 Eloquent 模型不是 DTO,它們也不是域模型。存儲庫將返回一個雄辯的模型,該模型將映射到域模型。然后可以修改該域模型或將其轉換為可用于讀取數據的 DTO。在這種情況下,職責以擁有更多代碼為代價被分離。
如果您與實用主義者交談,他們會說 Eloquent 模型是 DTO 和域模型(有時甚至是存儲庫)。由于 Eloquent 模型負責存儲數據、檢索數據、修改數據并將此數據傳遞給應用程序的其他部分。
最后,一切都與偏好有關。你可以純粹,你可以務實,你甚至可以在兩者之間做出選擇。這完全取決于你是一個多么先進的編碼器,項目有多大,它應該如何維護,必須進行多快的更改等。
時間差
存儲庫可以返回 DTO 或域模型,具體取決于您在分離職責方面的想法。
- 1 回答
- 0 關注
- 130 瀏覽
添加回答
舉報
0/150
提交
取消