2016-03-02 121 views
0

編輯3:嘗試重新提出問題。組成vs繼承與控制器

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

CASE 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()); 

CASE FACTORY/CONTROLLER

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

請告訴我差?

老問題FOLLOWING,尚不清楚

所以我念叨組成VS即使它已有8年進出口編程,因爲你知道建模程序沒有簡單幹淨的切割答案繼承,如平面Vs的雙翼飛機和一個引擎,這個簡單的審訊來到我的腦海。

雙翼飛機是一架飛機和一架飛機有一個引擎,並擁有座位和「最有可能」的窗口。

飛機班有發動機,座椅和窗戶。古典的構圖案例。換句話說,該計劃包含3個子對象。

現在,如果我們有飛機的工廠呢?這家工廠技術上會組裝飛機,這意味着它將有一架飛機,一臺發動機和一個座椅。現在想想控制器的原理,作爲模型和視圖之間的中介。它幾乎可以被視爲創建視圖所需的不同對象(模型)的工廠。

我的問題是,我可以簡單地創建一個控制器/工廠,包含了座椅,飛機,窗口,而無需嵌入在平面對象的前3個對象飛機本身反對呢?因此,基本上將「HAS邏輯」「解耦」成一個大的工廠/控制器。你怎麼看 ?

編輯:我的問題在這個具體的例子中沒有意義,因爲平面子對象實際上返回對象而不做東西。試想一下,如果這些子對象只是做的東西,並返回void

回答

1

的問題是有點朦朧,但基本上你所描述的是一個IoC容器,例如Spring,吉斯(在Java世界)或服務容器中Symfony 2(在PHP中)。

在上述所有情況下,控制器(和其他應用程序)都是普通類,不需要繼承任何功能,因爲所有必需的零件都在對象構造過程中注入,這是通過集中式廠。

+0

這比傳統方法或其真正依賴的用例更適合。 – delmalki

+0

第二將與兩個警告被認爲是更「現代」(無論該裝置):代碼進入_inside_在某些類中的一些方法,並且配置對象被傳遞(例如進入的構造函數),並且在該代碼使用未創建它。 – fdreger