我想确保我的应用程序强制执行依赖注入,但我进入有点咸菜......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