PHP 设计模式工厂、存储库和...?
PHP design patterns Factories, Repositories and...?
我们有用于创建复杂对象的工厂。 (用于制作东西)
我们有用于查找它们的存储库。 (寻找东西)
我们有什么可以更新它们的? (为了改变东西)
好像少了一块拼图?我认为它不属于存储库,因为这打破了单一责任...
更新属于存储库的实体(以及数据库)。存储库本身是数据库本身和程序之间的一个层。
因此,每个数据库操作都属于存储库。此外,存储库不得与数据库通信,它也可以将 XML、CSV 或 API 作为数据源。但这并不重要,因为您正在与存储库进行通信。存储库处理所有随后发生的事情。
您只需将存储库更改为另一个存储库,您的程序就可以正常运行,因为存储库都实现了相同的接口。您不再喜欢那个 MySQL 数据库了,老式的 CSV 会好得多吗?只需替换使用过的存储库即可。
查找带有存储库的条目只不过是 SELECT
语句,那么您为什么不 UPDATE
或 DELETE
呢?
进一步阅读 MSDN
上找到了很好的解释和示例
我认为这取决于方法。
以DDD为例,你说的是真的。 Repository 应该负责添加、查找和删除,因为它对集合起作用,但是有一个问题为什么它应该能够更新单个对象。
可以做什么?我想我只会复制别人说的,所以我只会postlink回答:approach to removing save/update from repository
我们有用于创建复杂对象的工厂。 (用于制作东西)
我们有用于查找它们的存储库。 (寻找东西)
我们有什么可以更新它们的? (为了改变东西)
好像少了一块拼图?我认为它不属于存储库,因为这打破了单一责任...
更新属于存储库的实体(以及数据库)。存储库本身是数据库本身和程序之间的一个层。
因此,每个数据库操作都属于存储库。此外,存储库不得与数据库通信,它也可以将 XML、CSV 或 API 作为数据源。但这并不重要,因为您正在与存储库进行通信。存储库处理所有随后发生的事情。
您只需将存储库更改为另一个存储库,您的程序就可以正常运行,因为存储库都实现了相同的接口。您不再喜欢那个 MySQL 数据库了,老式的 CSV 会好得多吗?只需替换使用过的存储库即可。
查找带有存储库的条目只不过是 SELECT
语句,那么您为什么不 UPDATE
或 DELETE
呢?
进一步阅读 MSDN
上找到了很好的解释和示例我认为这取决于方法。
以DDD为例,你说的是真的。 Repository 应该负责添加、查找和删除,因为它对集合起作用,但是有一个问题为什么它应该能够更新单个对象。
可以做什么?我想我只会复制别人说的,所以我只会postlink回答:approach to removing save/update from repository