Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> DI vs Inheritance jeśli idzie o dostęp do danych
trzczy
post 4.05.2016, 13:02:52
Post #1





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Kiedy fabryka produkuje sporo obiektów i każdy obiekt musi mieć dostęp do danych, które fabryka posiada, to lepiej Inheritance czy DI?

Załóżmy, że jest klasa fabryki o nazwie Test. I ta fabryka może produkować obiekty o klasie dziedziczącej(1.), albo o klasie pierwotnej z DI(2.):

1.
Kod
class PukProduct extends Factory{
    function __toString() {
        return $this->puk . "<br>\n";
    }
}


2.
Kod
class PinProduct {
    private $pin;

    function __construct($pin)     {
        $this->pin = $pin;
    }

    function __toString() {
        return $this->pin . "<br>\n";
    }
}


Ostatnio coś rozkminiałem i stanąłem przed tym dylematem. W przypadku dziedziczenia (1.) każdy wyprodukowany obiekt powstaje z klasy poszerzonej o klasę źródłową. Jeżeli ta klasa źródłowa jest, załóżmy, wielka to czy taki wyprodukowany obiekt jest tym samym większy od takiego, który powstaje na bazie klasy niedziedziczącej (2.)?

Jeśli jest przez to wielki i występuje wielokrotnie to chyba zajmuje pamięć? Jeśli tak, to nie lepiej stosować samo DI bez dziedziczenia(2.)?
Z góry dziękuję

edit: Poprawiłem tytuł, dostęp "do danych", a nie "di danych"

Ten post edytował trzczy 4.05.2016, 14:50:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
trzczy
post 5.05.2016, 18:10:10
Post #2





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Ok. Zatem rozumiem to przełożenie klasy bazowej na poszczególne widoki. Można też przewidzieć widoki, które w istocie tylko w znikomym stopniu korzystają z zasobów klasy bazowej. Przykładem może być strona z krótką treścią: "Zostałeś zalogowany. Naciśnij ok". Co i tak nie psuje całej idei widoków.

Tylko ja mam trochę inną architekturę. Dane z kontrolera są przypisane do jednej zmiennej $data. Do tych danych załączony jest string, określający szablon widoku, któy to szablon ma być użyty. Ten string szablonu może się nazywać 'index' albo 'articles', albo 'tagListing' czy 'portfolio' itd. Teraz fabryka obiektów bierze konkretny szablon identyfikowany przez taki klucz, potem buduje obiekty dla poszczególnych elementów strony. Np. obiekt footera, obiekt artykułów, headera, sekcji reklam itd.

Po prostu u mnie nie ma całościowego obiektu odpowiadającego za konkretny widok. Jest owszem całościowy obiekt View, ale on jest uniwersalny dla każdego widoku. Są natomiast obiekty poszczególnych części widoku. Teraz te obiekty poszczególnych części widoku muszą mieć dojście do zmiennej $data.

I to dojście chyba jednak powinno być przez DI, a nie przez dziedziczenie, aby uniknąć dziedziczenia zbyt wielu zasobów przez mały obiekt, co mogłoby, o ile się nie mylę, wpłynąć na zwiększone zajmowanie pamięci. Ciekawi mnie aspekt ekonomii pamięci przy wyborze pomiędzy dziedziczeniem, a wstrzyknięciem zależności bez dziedziczenia. Być może problem w ogóle wyssany z palca i nie ma różnicy?

Ten post edytował trzczy 5.05.2016, 18:22:38
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 17:04