我的工厂应该创建所有对象实例吗?包括新实体


Should My Factories Create All Object Instances? Including for New Entities?

我在PHP中有一个MVC应用程序。我的"M"包括域对象、工厂和映射器。通过服务层访问模型。

显然,我的映射器在从数据库检索时使用工厂来创建对象。但是工厂是否也应该为所有"新"实体创建对象,例如为新用户创建对象?

我想答案是肯定的,但我只是想核实一下。我会使用工厂提供默认值作为他们的任务之一。

顺便说一句:有什么术语可以区分"新"实体和从数据库中检索到的实体吗?(我不喜欢使用"new",因为new关键字在所有对象实例之前,即使是那些基于从数据库检索到的数据的对象实例)。

是。当然工厂应该为新实体创建对象。这就是工厂模式的作用。作为一个方面,考虑一个斐波那契序列来格式化非数据密集型实体。

首先想到的是答应,因为这是工厂真正应该做的:创建复杂的对象或隐藏对象创建,但我想提到两点需要考虑
这些观点和我将要提出的术语取自埃里克·埃文斯的优秀著作《领域驱动设计》。

  1. 用于重建的实体工厂不分配新的跟踪ID。

  2. FACTORY重构对象将处理违反不变的不同。

最后一点强调,如果工厂正在从存储介质中恢复对象,那么它不应该在对象状态(例如损坏的对象)中稍微出错,而是从根本上处理它们。

对于术语,我会说使用创建对象来表示新对象,使用存储或重建对象来表示保存的对象。