Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> DI vs Inheritance jeśli idzie o dostęp do danych
trzczy
post
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
Skie
post
Post #2





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Twoje pytanie jakie zadałeś w tym temacie jest nie do końca jasne. Porównujesz użycie dwów wzorców, które stosowane są pod inne potrzeby, a dodatkowo w dość dziwny sposób pokazujesz przykład użycia fabryk w kodzie, co budzi moje podejrzenia, że być może źle je interpretujesz.

Mówiąc krótko, dziedziczenie jest po to, byś rozszerzajać daną klasę nie musiał kopiować kodu z klasy bazowej, a Dependency Injection po to, by kod był prostszy do ponownego użycia i do testowania. DI powinieneś używać zawsze, bo jest to krótko mówiąc dobra praktyka programistyczna, która być może na poczatku trudna (zwłaszcza jak ktoś się przyzwyczaił do Singletonów, Fasad lub programowania opartego o klasy jak sprzed 10lat), po opanowaniu niesie ze sobą same korzyści. Dziedziczenie używasz z kolei wtedy, gdy jest Ci rzeczywiście potrzebne.

Teraz wracając do Twojego pytania, to jeśli pytasz o nadmiarowy kod, który może się pojawić w klasie potomnej ze względu, na to że potrzebujesz założmy tylko 20% klasy funkcjonalności klasy bazowej, to ewidentnie zrobiłeś coś źle z architekturą programu. W innym przypadku jeśli Twoje pytanie sprowadza się tylko do "czy większa klasa = cięższy pamięciowo obiekt?" to odpowiedź brzmi tak.

Ten post edytował Skie 4.05.2016, 14:03:40
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 17.10.2025 - 11:41