2

我一直在尝试将存储库模式合并到我的 PHP 应用程序中,大致遵循这个示例

我正在尝试在以下之间做出决定:

  1. 限制我从数据库中检索的字段
  2. 检索所有这些并将它们存储在域对象中。

我链接的主题中接受的答案显示了实现选项 1的方法。第二个答案显示了为什么检索完整对象可能更好。

就我而言,检索完整对象通常涉及获取 50 到 250 个字段。检索这些对象的数组,这将是很多可能影响应用程序性能的字段。这就是为什么我一直倾向于选择检索哪些字段,因为我通常需要多达 10 个字段来执行常见操作。

如果我采取选择性的方法,那么我将无法使用域对象来存储数据,并且我可能会遇到“第二个答案”提到的问题。

  1. 您最终会在许多查询中得到基本相同的数据。例如,对于用户,您最终会为许多调用编写基本相同的 select *。一个呼叫将获得 10 个字段中的 8 个,一个将获得 10 个字段中的 5 个,一个将获得 10 个字段中的 7 个。为什么不将所有字段都替换为一个获得 10 个字段中的 10 个的呼叫?这不好的原因是重构/测试/模拟是谋杀。
  2. 随着时间的推移,很难对您的代码进行高层次的推理。而不是像“为什么用户这么慢?”这样的陈述。您最终会跟踪一次性查询,因此错误修复往往很小且本地化。
  3. 底层技术真的很难替代。如果您现在将所有内容都存储在 MySQL 中并想迁移到 MongoDB,那么替换 100 个 ad-hoc 调用比替换少数实体要困难得多。

我仍然可以将域对象用于创建更新和删除操作,但读取操作必须按照CQRS 模式存储在普通对象或关联数组中。我目前确实有一些涉及连接的更复杂的查询,如果不进行数据库通常在 1 个查询中处理的额外数据库调用和处理,这些查询很难与域对象一起复制。

考虑到所有这些,对我来说将域对象用于读取操作是否有意义,或者根本没有?我是否缺少域对象可以提供的其他一些优势来帮助解决我所说的问题?

4

0 回答 0