1.2.3.1 Factories 工厂模式
当你有一个复杂的模型,使用专门的抽象来处理其生命周期的各个部分是一种很好的做法。不要在整个代码库中使用创建实体的代码片段,而是使用模式将它们集中起来。这个策略有两个目的:
它将所有的创建代码放在一个位置
它抽象了调用者创建实体的过程。
举个栗子,你可以有一个Account账户工厂,它可以获取创建帐户所需的各种参数,并将其交给新创建的帐户。你从工厂返回来的账户可能是一个支票、储蓄或货币市场类型的账户,这取决于你所传递的参数。因此这个工厂让你可以通过使用相同的API来创建不同类型的对象。它抽象了创建对象的过程和类型。
创建的逻辑在你的工厂之内。但是工厂属于哪里呢?毕竟,一个工厂,为您提供了服务--创建和初始化的服务。工厂的责任是移交给你一个完全构造的、最低有效的领域对象实例。一种选择是将工厂作为定义了领域对象的模块的一部分,这在Scala中有一个使用伴生对象的自然实现,如下清单所示。另一种选择是将工厂看作是一组领域服务的一部分,第2章详细介绍了这一实现。