2013-11-04 23 views
1

下面我有一系列的課程。我試圖找出將Process.php中的數據傳遞到以下每個類中的最佳方法。課程結構和傳遞數據

/CLI/ 
    /Process/ 
     /Condition 
      Rule.php 
     Condition.php 
     Single.php 
    Process.php 
    Response.php 
    Registry.php <-- I don't want to use this, It feels sloppy 

起初我想層次結構中的數據通過像下面(我不是在此刻偏袒繼承組成延伸的任何東西):

\ CLI \ Process.php

public function run() { 
    $condition = new Condition($dataToShare); 
} 

\ CLI \過程\ Condition.php

public function __construct($dataToShare) { 
    $this->data = $dataToShare; 
} 

\ CLI \程序\條件\ Rule.php

public function __construct($dataToShare) { 
    $this->data = $dataToShare; 
} 

相反我決定用一個註冊模式,因爲我是偏執狂。我感覺像共享數據從班級到班級,而且很混亂。然後,我發現自己在一個子類中設置了一些註冊表值,這同樣糟糕!

所以一個同事告訴我試試一個抽象類,這樣每個人都可以擴展它。我的問題是,如果我擴展一個抽象類,那麼我的值將不會被設置(因爲它是一個新的父實例)。

是我最好的選擇a Singleton?有沒有人有任何建議,以保持這種清潔?我希望這是乾淨的,我不想讓這種偏執狂想到污染數據並不斷將其傳遞給關卡。

雖然我問這個問題,感覺就像我在水中講中文。

+1

看看http://stackoverflow.com/questions/6094744/dependency-hell-how-does-one-pass-dependencies- to-deeply-nested-objects/6095002#6095002回答你的問題。 [不,單身人士永遠不是你最好的選擇。](http://stackoverflow.com/questions/4595964/who-needs-singletons/4596323#4596323) – Gordon

+0

愛他的第一個音符「這是一個常見的誤解,依賴關係需要通過對象圖表「。 – JREAM

+0

@戈登有了一個房子建設者的例子,你會如何建議我在子類中獲取生成器?我不能重新實例化它,否則它將重置將在其中設置的值。 – JREAM

回答

1

你可以嘗試抽象類和靜態屬性與所有您的實例分享

+0

這實際上是一個好主意,我必須考慮這一點 – JREAM