好吧,我可能只是把头脑中的事情搞得一团糟或者完全遗漏了一些东西;但我不太确定。
我有一个名为Opportunity的类以及一个名为Activity的类。
机会将伴随许多活动。
没有理由为什么活动需要访问机会方法/属性,因为活动是机会之间的一对多关系,是一个完全不同的对象而不是机会。但是,如果没有与机会相关联,活动就不可能存在。
这是儿童父母关系还是活动需要扩展商机类?
继承如何与此示例一起使用?
答案 0 :(得分:2)
您在谈论Composite pattern
,您的班级Opportunity
由一个或多个Activities
组成。
这是子父关系还是活动需要扩展 机会班?
不是子父关系,因为它们之间没有层次结构,Activities
不需要使用或重新实现任何Opportunity
方法或属性。活动只是机会的一部分。所以不,Activity不需要扩展商机类。
答案 1 :(得分:1)
您不必将它们作为亲子关系。事实上,如果有的话,听起来你需要dependency injection而不是
class Activity {
/** @var \Opportunity */
protected $opportunity;
public function __construct(\Opportunity $opportunity) {
$this->opportunity = $opportunity;
}
public function run() {
$this->opportunity->doSomething();
}
}
$activity = new \Activity($opportunity); // Pass an instance of Opportunity here
这样,您必须让Opportunity
班级和Activity
有权访问,但它只能使用所需的方法。不用担心遗产。