2

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

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

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

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

4

2 回答 2

1

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

于 2013-07-16T22:53:39.233 回答
1

首先想到的是说“是”,因为这是工厂真正应该做的事情:创建复杂对象或隐藏对象创建,但我想提两点需要考虑。
这些要点和我要提出的术语取自 Eric Evans 的优秀著作Domain Driven Design

  1. 用于重组的 ENTITY FACTORY 不会分配新的跟踪 ID。

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

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

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

于 2013-07-16T23:33:11.183 回答