组合、继承与控制器


Composition vs Inheritance vs Controller

编辑3:尝试重新提问。

class Config {
    protected $a;
    protected $b;
    public doStuff();
    public getA();
}

案例1

class Connection {
     protected $config;
     public function __construct(){
         $this->config = new Config();
     }
     public function getConfig(){
        return $this->config;
     }
}
$c = new connection();
$c->getConfig()->doStuff();
$otherClass->setA($c->getConfig()->getA());

外壳工厂/控制器

 $config = new Config();
 $config->doStuff();
 $a = $config->getA();
 $otherClass->setA($a);

有什么区别?

老问题接下,不清楚

所以我正在阅读关于组合与继承的信息,即使我已经编程了 8 年,因为你知道对程序进行建模没有简单干净的答案,例如飞机、双翼飞机和发动机,这个简单的询问出现在我的脑海中。

双翼飞机是一架飞机,飞机有发动机,有座位,有"最有可能"的窗户。

飞机类有发动机,座椅和窗户。经典的作曲案例。换句话说,该计划包含 3 个子对象。

现在,如果我们有一个飞机工厂呢?从技术上讲,这家工厂将组装飞机,这意味着它将有一架飞机,一个发动机和座椅。现在考虑一下控制器的原理,它充当模型和视图之间的中介。它几乎可以看作是创建视图所需的不同对象(模型)的工厂。

我的问题是,我可以简单地创建一个包含座位、平面、窗户对象的控制器/工厂,而平面本身将这 3 个先前的对象嵌入到平面对象中吗?

因此,基本上将"HAS逻辑"解耦"到一个大工厂/控制器中。你觉得怎么样?

编辑:我的问题在这个特定示例中没有意义,因为平面子对象实际上返回对象并且不做一些事情。想象一下,如果这些子对象只做一些事情并返回void

这个问题有点模糊,但基本上你描述的是一个IoC容器,比如Spring,Guice(在Java世界中)或Symfony 2中的服务容器(在PHP中)。

在上述所有情况下,控制器(和其他应用程序部分)都是不需要继承任何功能的普通类,因为所有必需的位和部分都是在对象构造期间注入的,对象构造由集中式工厂承担。