在this example之后,我一直试图将存储库模式合并到我的PHP应用程序中。
我正在尝试选择:
我链接的主题中公认的答案显示了一种实现选项1的方法。The second answer显示了为什么代替检索完整对象可能更好。
就我而言,检索完整对象通常涉及50到250个字段。检索这些对象的数组,这将是很多可能影响应用程序性能的字段。这就是为什么我一直倾向于选择要检索的字段,因为我通常最多需要10个才能执行常见操作。
如果我采用选择性方法,那么我将无法使用域对象来存储数据,并且我可能会遇到“第二个答案”提到的问题。
- 您最终在许多查询中得到的数据基本相同。例如,对于一个用户,您最终将为许多呼叫编写基本上相同的select *。一个电话将获得10个字段中的8个,一个将获得10个字段中的5个,一个将获得10个字段中的7个。为什么不将一个呼叫替换为10个字段中的10个呢?不好的原因是重构/测试/模拟是谋杀。
- 随着时间的流逝,很难对代码进行高层次的推理。而不是像“为什么用户这么慢?”这样的语句。您最终会跟踪一次性查询,因此错误修复往往很小且已本地化。
- 要替换基础技术真的很难。如果您现在将所有内容存储在MySQL中并想移至MongoDB,则替换100个临时调用要比少数实体困难得多。
我仍然可以将域对象用于“创建更新”和“删除”操作,但是根据CQRS pattern,读操作必须存储在普通对象或关联数组中。我目前确实有一些涉及联接的更复杂的查询,如果不执行额外的数据库调用和处理数据库通常会在1个查询中处理的工作,这些查询将很难与域对象一起复制。
鉴于所有这些,使用域对象进行读取操作还是对我有意义?我是否错过了域对象可以提供的其他一些优势来帮助我解决上述问题?