【问题标题】:Which pattern is this? (Factory/Builder/Mapper/other)这是哪个图案? (工厂/建造者/映射器/其他)
【发布时间】:2015-11-04 05:07:11
【问题描述】:

我从DataMapper 模式中获取了一些线索来创建这样的东西:

class BusinessObjectCreator
{
    public function create()
    {
        //Acquire Data
        $number = filter_input(INPUT_POST, "number", FILTER_SANITIZE_INT);

        //create and populate object
        $object = new Object();
        $object->setNumber($number);
        return $object;
    }
}

//usage:
$objectInstance = (new BusinessObjectCreator())->create();

//examples of usage once created
$objectInstance->someBusinessFunction();
echo $objectInstance->getNumber();

但在我看来,它也像 Factory 模式或 Builder 模式。

它是什么?我的编码是否正确?

目的是用数据创建一个对象实例填充。然后我可以使用创建的对象对数据进行操作。

【问题讨论】:

  • 只是一个随意的评论/问题:你为什么不使用依赖注入?换句话说,你为什么不把一个Object传给create方法呢?
  • 你的意思是我为什么不在别处创建对象,然后将其传递给create()函数,(然后填充对象,并返回它)?
  • ^ 如果我理解正确的话......我可以。它只会使模式不同。我可以在其他地方创建对象并将名称更改为BusinessObjectPopulator 以更好地反映目的。
  • 是的,我知道这(将对象作为参数传递或在函数内创建对象)不是您要的。我只是想指出一些可以改进的地方。至于问题本身,这个模式对我来说就像一个工厂,它仍然可以通过让你的类实现接口来改进。
  • 你指的是什么样的界面?我不确定我是否理解。此外,我可以通过注入输入源来进一步改进这一点,而不是像现在这样将输入源硬编码到类中。

标签: php design-patterns factory datamapper builder


【解决方案1】:

这看起来像一个工厂方法。命名约定使您认为它是构建器模式,它具有用于构建具体对象的单独对象。您有一个单独的对象,但没有像构建器那样设置数据。

我对 PHP 不太熟悉,但要使其成为构建器模式,您需要为数据创建方法,然后在方法链的末尾调用 create()/build()。

它的创作看起来像这样

$objInstance = (new BusinessObject())->number($number)->create();

由于您只有一个具有创建对象的方法的类,因此这种模式属于工厂方法类别。通常,当一个对象在创建时有很多潜在的不同配置时,你会使用构建器,所以如果你只设置一个数据,你可以坚持工厂方法。

Builder Pattern

【讨论】:

  • 在我的应用程序中,我设置了几个部分——模型名称、各种输入参数和其他数据。它同时完成(即所有数据在同一时间点已知)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
相关资源
最近更新 更多