我看到的每个地方都注意到,域驱动设计(DDD)和实体水合方法都试图直接从数据层填充实体。我不同意这种方法。这不是因为这些方法不起作用。相反,我认为这种方法为测试目的提供了低水平的透明度。我建议在数据访问层,检索数据以填充字典,而不是直接填充实体本身。这有几个原因:
首先,有更大的灵活性。可以填充每个结果集的字典。我们稍后会决定从这些结果集中填充哪些实体。
其次,需要较少的数据层知识来确定数据检索失败的位置。我们仍然可以为验证数据检索编写测试,而无需了解有关其相关复杂域实体工厂的任何信息。
有一个所谓的劣势,表现如何?通过两层比通过一层要慢?是的,但是通过单个数据层获得的性能增益在这里可以忽略不计。我说这个的原因是因为字典和这些词典填充的条目都将被缓存。所以,如果有什么会有内存开销。我认为获得上述两个优势是值得的。
答案 0 :(得分:2)
似乎测试是问题(“用于测试目的”),所以我建议你像@tschmuck指出的那样使用repositories。
As Ayende points out,他们可能会给你不必要的烤宽面条代码(即太多层),但它们会给你灵活性。您可以自己实现假冒/测试间谍,模拟和存根,以及使用内存数据库(如SQLite),并且依赖类也同样高兴。