1

我看到大多数项目都创建了单独的工厂类,例如,它们将有一个 User 类和一个 UserFactory 类。如果您的工厂需要更多方法而不仅仅是 CreateUser 方法,这是有道理的,但这些工厂中的大多数只有一个构造函数和一个 CreateUser 方法(或工厂创建的任何等效方法)。User.create()那么,除了向类添加静态方法之外,还有其他原因可以创建单独的工厂类吗?

4

2 回答 2

1

根据我的经验,如果您经常想要更改实现,尤其是对于测试用例,主要使用单独的工厂类。例如,如果 User 具有访问数据库的方法并且对于单元测试来说“太慢”,那么您可能希望拥有一个不使用数据库的 MockUser。然后,您可以为实际应用程序使用 RealUserFactory,并为单元测试使用 MockUserFactory。

但是可能存在您想要更改的真实世界示例,例如从军事规范应用程序中的 SecurityClearedUser 到另一个应用程序中的 AnyOldUser。因此,配置文件将声明工厂的类,例如 MilitaryUserFactory 或 AnyOldFactory。

当然,User.create() 可以从配置文件中读取要创建的实际类。所以,在实践中,我不确定是否有那么大的差异。取决于事情是如何设置的。

于 2012-09-14T01:22:33.843 回答
0

要考虑的另一件事是“关注点分离”。在 User.Create 的情况下,用户类将做的比它应该做的更多,因此需要一个类来精确地做到这一点,即创建一个用户。

通过使用 User.Create,您可以将对象的创建与类本身耦合起来,在其他情况下,您将面临用户创建由多个步骤组成的场景,如果是这种情况,则 User.Create方法变得不合适。

所以简而言之,让用户对象负责成为用户,并将用户的创建外包给外部关注点,工厂。

从可读性的角度来看,User.Create 与 UserFactory.Create... 将其视为“汽车无法制造汽车”,但工厂可以。

于 2013-07-19T13:14:34.967 回答