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

时间:2013-07-16 22:47:54

标签: php design-patterns factory-pattern

我在PHP中有一个MVC应用程序。我的'M'包括Domain Objects,Factories和Mappers。可以通过服务层访问模型。

显然,我的Mappers使用Factories从数据库中检索时创建对象。但是,工厂还应该为所有“新”实体创建对象,例如对于新用户?

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

作为一个要点:是否有任何术语可以区分“新”实体与从数据库中检索的实体? (我不喜欢使用'new',因为new关键字在所有对象实例之前,甚至是基于从数据库检索的数据的实例。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我想到的第一件事是说是,因为这是工厂应该做的事情:创建复杂的对象或隐藏对象创建,但我想提两点要考虑。
这些要点和我要提出的术语来自Eric Evans优秀的书Domain Driven Design

  1.   

    用于重建的ENTITY FACTORY不会分配新的   跟踪ID。

  2.   

    重建对象的FACTORY将处理违反   不变的。

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

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