阅读了很多人们说我应该返回领域模型的文章……但这会破坏我存储库的整个想法。我正在使用 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 关注
- 95 浏览
添加回答
举报
0/150
提交
取消