Ben herhangi bir bağımlılık nesneleri (Dependency Injection), örneğin nesnelerin örnekleme yönetmek için bir fabrika sınıfını kullanıyorum ve kurucular içine geçirerek
function createBasket() {
//pass in dependent objects
$apiCon = $this->createAPIConnector($this);
$basket = new Basket($this, $apiCon);
return $basket;
}
Ben, vb basit ve daha güçlü birim test, net kod izin, (Fabrika dışında) herhangi sınıfları içinde 'yeni' anahtar sözcüğünü kullanarak önlemek için çalışıyorum
Şimdi, benim sorum çok sınıfları örneğin gerektiren yapılandırma değerlerine ilişkindir
$apiURL = 'http://some.api.com';
$apiKey = 'abcde12345';
$adminEmail = 'someone@site.com';
Bu değerler her bir uygulama örneği için sabit kalır. Şu anda bir tek sınıfta yapılandırma onları var ve onlar takip ederek herhangi bir sınıf içinde ulaşılabilir:
$cfg = Config::getInstance();
$address = $cfg->apiURL;
Ancak, bu sınıf örneği hala onu çağırır herhangi Sınıf içinde bir bağımlılık olduğunu, bu yüzden örneğin, sınıf yapıcılar içine bu geçen düşünmek gerekir
function createBasket() {
//pass in dependent objects
$apiCon = $this->createAPIConnector($this);
$cfg = Config::getInstance();
//pass singleton config object to constructor
$basket = new Basket($this, $apiCon, $cfg);
return $basket;
}
... Ya da belki daha doğrusu yapıcısı aracılığıyla daha, bir dizi yöntemi ile onları geçmek:
function createBasket() {
//pass in dependent objects
$apiCon = $this->createAPIConnector($this);
$basket = new Basket($this, $apiCon);
//pass singleton config object to setter
$basket.setConfig(Config::getInstance());
return $basket;
}
Iyi yaklaşım Herhangi bir rehberlik çok takdir.
Teşekkürler, James