我想確保我的應用程序強制執行依賴注入,但我進入有點鹹菜......PHP OOP ::弄不清工廠類和傳球對象構造
class Factory {
public $sessionId;
public $config;
public $lib;
function __construct() {
$this->getSessionId();
}
function getSessionId() {
if (isset($_COOKIE['sk'])) {
$this->sessionId = trim($_COOKIE['sk']);
} else {
$sm = $this->createSessionManager();
$this->sessionId = trim($sm->getNewKey());
setcookie("sk", $this->sessionId, time() + 3600 * 3, "/");
setcookie("vb", 0, 0, "/");
}
}
function createBasket() {
$t = $this->createTicket();
$co = $this->createContribution();
$cfg = $this->createConfig();
$basket = new Basket($t, $co, $cfg);
return $basket;
}
function createTicket() {
$sm = $this->createSessionManager();
$cfg = $this->createConfig();
$ticket = new Ticket($this->sessionId, $sm, $cfg);
return $ticket;
}
.. .. }
首先,我想知道我是否以正確的方式接近事情。一個例子瀏覽器畫面 - 通過瀏覽器叫做 - 將是:
function __autoload($class_name) {
include 'classes/' . $class_name . '.class.php';
}
$factory = new Factory;
$performance = $factory->createPerformance();
$pno = (isset($_GET['pno']) ? $_GET['pno'] : 0);
print $performance->displayHtmlListing($pno);
我的其他問題/問題是有關我如何防止在對象A需要對象B,一個「抓22」的局面 - 在極少數情況下 - 將需要對象A 。
一個例子,在工廠類:
function createParser() {
$am = $this->createApiManager();
$parser = new Parser($am);
return $parser;
}
解析器對象被傳遞對象插入的構造,以滿足在業務邏輯它的依賴性。它的工作是讀取文件請求,如果滿足某些條件,它需要抓住$ am對象(APIManager)併發出對API的請求。問題是,APIManager通過解析器對象傳遞所有請求,並且我無法輕鬆地移除對解析器的依賴關係,而不會破壞業務規則或添加冗餘條件代碼。
想知道如果有人對如何解決這個問題有一些想法?
謝謝,詹姆斯
UPDATE:
的依賴問題位的詳細信息:
ApiManager.caller() - 它的工作是走下車來的API URL發送GET變量,檢索結果。這個調用者()方法幾乎被所有的類使用(也許這是一個很好的理由,因爲它是超類,並擴展了需要它的類)。
調用方()的部分責任是檢查正在進行的API調用。如果滿足某個條件,則需要停止並調用SessionManager.getNewSession(),該SessionManager.getNewSession()將返回到相同的API並檢索值。只有當這完成時,才能完成原始請求(在調用方()中)。
問題是SessionManager.getNewSession()也使用caller()。
>「如果一個類的實例,需要另一個類,反之亦然正常工作的實例」 - 專題起動器使用依賴注入,其主要思想是將特定的類實例注入依賴類 – galymzhan 2011-01-06 18:39:03