0

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

问题是我的班级(项目)有 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,所以添加到其中的任何新东西也可以在这里使用。

4

1 回答 1

1

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

一个是你将两种性别都粘在一个班级上,并用某种标志区分男性/女性(例如,你计划拥有两个以上性别的“类型”)。

另一个是使用特征。

例如,您知道 $displayDate 总是被获取/设置并以相同的方式处理。因此,您创建了一个特征,例如 hasDisplayDate,您可以在其中指定属性(受保护的 $displayDate)和所有必要的方法。在性别中,您只需添加“使用 hasDisplayDate”来混合特征。您可以在需要时重载特征中存在的方法。

于 2013-04-26T13:02:19.507 回答