PHP OOP :: Fabrika sınıf ve kurucular nesneleri geçen hakkında bocalama

0 Cevap php

Benim app Dependency Injection zorlar sağlamak çalışıyorum ama bir turşu biraz içine alıyorum ...

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;
}

.... }

Her şeyden önce, ben doğru bir şekilde yaklaşım şey olmadığımı bilmek istiyorum. Bir örnek izleyici sayfası - bir tarayıcı tarafından adlandırılan - olurdu:

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

Ender durumlarda - - Objecta ihtiyacınız olacak benim diğer soru / sorun ben Objecta ki objectB gerektiren bir 'catch 22' durumu önlemek nasıl ilgilidir.

Bir örnek, Fabrika sınıfta:

function createParser() {
    $am = $this->createApiManager();
    $parser = new Parser($am);
    return $parser;
}

Çözümleyici nesne iş mantığı kendi bağımlılıkları karşılamak için yapıcı bir nesne geçirilir. Onun iş dosyaları için istekleri okumak için ve belirli bir koşul yerine, eğer $ ÖS nesne (APIManager) tutunmasını ve API için bir istek ateşlemesi gerekiyor. Sorun APIManager all Ayrıştırıcı nesnesi üzerinden talep geçer ve kolayca iş ya da kurallara uymayan gereksiz koşullu kod eklemeden Ayrıştırıcı üzerinde bağımlılık kaldırmak edemezler.

Herkes bu soruna almak için bazı düşünceler vardı merak?

Teşekkürler, James

UPDATE:

Bağımlılık sorunu üzerinde biraz daha fazla bilgi:

ApiManager.caller () - bu iş değişkenleri GET göndermek bir API URL'ye çıkmak ve sonuç almak için.

Bu arayan () metodu neredeyse tüm sınıfların (süper sınıfta olması ve ihtiyaç sınıfları uzatmak? Için belki iyi bir neden) tarafından kullanılır.

Arayan () sorumluluk parçası API çağrıları yapılıyor ne kontrol etmektir. Belirli bir koşul ise, onu durdurmak ve yapmak aynı API söner SessionManager.getNewSession çağrısı () ve bir değer alması gerekir. Bu tamamlandığında yalnızca (() arayanı) özgün istek tamamlanabilir.

Sorun SessionManager.getNewSession () ayrıca arayan () kullanır.

0 Cevap