Php,复合模式,当孩子知道父母时,它是不是很糟糕?

时间:2015-10-09 14:34:28

标签: php

给出这段代码:

class Parent
{
    public function getAdata()
    {
        return array(1,2,3,4);
    }

    public function getChild()
    {
        return new Child ($this);
    }
}

class Child
{
    public function __constructor (Parent $p)
    {
        $p->getAdata();
    }
}

他们说这很糟糕,因为Child知道Parent。如果我像这样重写它:

class Parent
{
    public function getAdata()
    {
        return array(1,2,3,4);
    }

    public function getChild()
    {
        return new Child ($this->getAdata());
    }
}

class Child
{
    public function __constructor ($data)
    {
    }
}

它更好,但为什么?

1 个答案:

答案 0 :(得分:4)

这里根本没有亲子关系。您只需实例化一个类并将其传递给另一个类的实例。完全没有问题,并不意味着这些类有任何关系。

对该示例的不好之处在于您在Child内部对Parent进行了硬编码。这使Child成为硬编码的依赖,无法替换或外部控制,因此将来可能会因测试或重构代码而导致问题。你应该考虑依赖注入。