【发布时间】:2015-09-17 09:59:51
【问题描述】:
我有 MonthTimeCard 和 MonthReport 课程。它们使用相同的输入字段来选择月份,因此验证相同,初始化相同。
class MonthTimeCard {
private function setPrivateVarsByUserInput()
{
$this->month_from_input = '2015-09';
$this->date_from = '2015-09-01';
$this->date_to = '2015-09-30';
// lets say those 3 values are formated, validated and returned as array from MonthUserInput class.
// but I have to repeat code in my both classes to initialize them
// I could have one liner like $this->data = $this->monthUserInput->getInput();
// but current class code will need to call $this->data->[variable] everywhere - not looking very nice,
// because ->data is not usefull here, just extra characters.
}
}
Class MonthReport {
... same initialisation
}
我现在只是对它们进行了硬编码,但您知道分配将来自将验证的 MonthUserInput 类的返回数组。只有一个用户输入字段可以获取像“2015-09”这样的字符串,MonthUserInput 类将添加月份的第一天和最后一天。
如果我使用继承,我可以避免这种情况,但我读过应该避免这种情况,甚至有人说它应该从 OOP 中删除。
http://blogs.perl.org/users/sid_burn/2014/03/inheritance-is-bad-code-reuse-part-1.html
通过继承,我只需在父类中验证和设置用户输入,因此没有重复。
我现在应该怎么做?当然,在这个例子中它只有 3 个变量,我打算有 5 个,虽然不多,但仍然是重复的,在这种情况下,继承不会有重复。
更新
我希望看到可以用来向任何不同意继承对这种情况不利的人解释的解释。例如,我与一位经验丰富的程序员讨论过,他认为在这里使用继承来重用代码没有问题。我只是说网上有很多关于使用组合的说法,但这不是这种情况的好论据。
例如:
优先组合而不是继承。如果两个类没有“是 a" 关系,那么永远不需要使用继承 实现代码复用。从不。
这对某些人来说不是一个好的论据。他们可以问 - 谁发明了这些规则,为什么?他们没有看到违反这条规则的问题。
【问题讨论】:
-
这是什么语言? Perl,PHP?请在您的帖子中添加适当的标签。
-
那篇博文很烦人,因为他创建了一个简单的模型,然后更改了需求并说“哦,看,模型坏了!”。然后他创建了自己的模型,但首先说明了所有要求。他声称他的建模技术非常出色,因此继承很糟糕。
-
@user1438038 - 我正在使用 PHP,但它应该适合任何具有 OOP 的语言
标签: php perl oop code-duplication