php - 使用对象组合重构一个类

时间:2013-04-26 12:43:59

标签: php class refactoring

我最近有时间重构一个旧的个人项目,我想用它来学习如何最好地处理这类课程。

问题是我的班级(项目)有2个与之相关的性别(并且将来可能更像是项目的海报,以及项目的帽子/附件),这些性别中的每一个都使用几乎相同的方法来获取并设置它们(get_productImage,set_price等)。

我想重构这个类,以便不是每个函数使用男性和女性对应,我可以编写一次代码,并使用它两次(或更多)。这是我迄今为止的一个非常简单的例子:

class Item
{
    public $ID, $displayDate;
    public $male, $female;

    public function __construct($ID)
    {
        //Fancy code to initialize stuff like $displayDate
        $male = new Gender('male', $ID, $displayDate);
        $female = new Gender('female', $ID, $displayDate);
    }
}

class Gender
{
    private $ID, $displayDate;

    public function get_currentPrice()
    {
        //The current price of the gender changes based on the display date vs the current date and then adjusts the price accordingly and returns it.
    }
}

有没有办法可以更好地重写这个?我遇到的另一个问题是displayDate可以(并且将会)改变和改组,因此对它的任何更改都需要传播到性别类,这将使这个问题变得非常混乱...

如果有帮助,我使用的是PHP 5.4,所以添加的任何新内容也可以在这里使用。

1 个答案:

答案 0 :(得分:1)

我看到两种一般的解决方法。

一个是你将两个性别都粘在一个单一的类别上,并区分男性/女性与某种旗帜(例如,你计划有两种以上性别的“类型”)。

另一个是使用特征。

例如,您知道$ displayDate始终以相同的方式获取/设置和处理。所以你创建了一个特征,比如hasDisplayDate,你可以在其中指定property(protected $ displayDate)和所有必需的方法。在性别中,你只需添加'use hasDisplayDate'来混合特征。您可以在需要时重载特征中存在的方法。