PHP OOP设计 - 将“特征”与功能分离

时间:2015-05-22 13:41:58

标签: php oop

在下面的代码中,我有一个名为Dog的类。狗可以做很多事情,比如树皮或坐着。狗也具有品种,性别或颜色等特征。

如果你有一只具有许多特征和许多功能的狗,这段代码将来可能会变得混乱,那么什么是OOP适当的分离方式,例如狗的特征与功能?

是否只是创建其他类,例如class DogCharacteristics class DogFunctions并拥有一个名为Dog的父类?

我读过http://www.ibm.com/developerworks/library/os-php-7oohabits/所以它让我思考如何实现良好的OOP习惯。

class Dog
{
    private $breed;

    public function getBreed()
    {
        return $this->breed;
    }

    public function setBreed($breed)
    {
        $this->breed = $breed;
    }


    public function getDogInfo()
    {
        return "This dog is " . $this->getBreed();
    }

    public function bark()
    {
        return "The dog barks!";
    }

    public function sit()
    {
        return "The dog sits.";
    }
}

你如何改进上述代码,使其遵守良好的OOP习惯,并将狗的功能与特征区分开来?

1 个答案:

答案 0 :(得分:0)

有几种方法,但我们现在常常看到的是特征。使用特征,您可以将代码分成不同的文件,同时将整个想法保持在一起。问题在于,如果您使用IDE,您的方法的特征文件将闪烁,因为它不知道从何处获取属性。

class Dog
{
    use DogCharacteristics;
    use DogMethods;
}

trait DogCharacteristics
{
    var $breed;
    var $color;
}

trait DogMethods
{
    public function walk(){}
    public function bark(){}
}

它远非最好的方法,但它是今天在框架中大量使用的方法。

令我印象深刻的是:

  • 如果您有一只具有许多特征和功能的狗
  • ,此代码将来会变得混乱

这是一种糟糕的做法。过度优化代码通常不是一个好方法。您应该专注于使用单元测试编写清晰,文档化的代码,以便稍后重构,而不是一开始就思考如何最好地进行重构。