Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ php | oop ] Dziedziczenie czy agregacja ?
Forum PHP.pl > Forum > PHP
DhuCerbin
Witam

Mam problem natury projektowej :-)

Mam dana klase systemu szablonów, chce stworzyc klase pozwalajaca na szybką obsługe tego, jakby wzorzec adaptera. Nie wiem jednak czy moze skorzystac z dziedziczenia. Czyli dwie mozliwosci :

:arrow: Klasa macierzysta 'Template' jest przodkiem klasy sterujacej 'TplManager', która wychdozi z tego jest rozszerzeniem jej. Wtedy w konstruktorze uruchamiamy konstruktur
[php:1:a538664b0b]
function __construct($param){
parent::__construct($param);
}
[/php:1:a538664b0b]
Co daje mi pełna włądze nad kodem i proste odwołania przez pseudozmienna $this.

:arrow: Drugie - Klasa 'Template' jest zawierana przez referencje we właściwości.
[php:1:a538664b0b]
function __construct($params){
$this -> tpl =& new Template($params)
}
[/php:1:a538664b0b]
Mam tu z kolei władze poprzez referencje w wartosci.

:?: teraz pytanie : która możliwosć jest lepsza pod wzgledem nie wydajnosciowym, ale bardziej mi chodzi, o zgodnosć z zasadami oop.

:idea: Wedle mnie pierwszy sposób moze i wygodniejszy, ale nijak ma sie do zasady : "Stosuj kompozycje niz dziedziczenie" - Wtedy jednak mam wydaje mi sie pełniejsza kontrole nad klasą, za sprawą uzycia public/protected/private - moge zapezpieczać na dwa poziomy, tzw. zewnetrzny i rodzinny [ protected a private]. Drugi sposób byłby jednak zgodny ze znanym wzorcem adaptera, który to wymyslili ludzie doswiadczenni. Jednak wydaje mi sie tu problemem jeden fakt. Jeśli klasa Template sie rozrośnie, to moze zostać zachwiana zasada 'otwarcia i zamkniecia', gdy w pierwszym rozwiazaniu, zmieniam tylko slowo po 'extends'.

Wiec co bedzie lepsze ?

pozdrawiam DhuCerbin
Ludvik
Ja bym poszedł pierwszą drogą... Dziedziczenia się używa, jak chcesz poszerzyć możliwości klasy, dodać kilka funkcji. Agregacja w tym przypadku wydaje mi się niewygodna. Z resztą sam zobacz, gdy będziesz chciał się odwołać do szablonu będziesz musiał użyć przy agregacji zawsze zapisu $agregacja->$tpl->... W przypadku dziedziczenia zapis staje się łatwiejszy.
halfik
"'Template' jest przodkiem klasy sterujacej 'TplManager'" -> odpowiedziales sobie na wazne pytanie... dziedziczenie smile.gif
DhuCerbin
To jest moje załozenie. W pierwszej metodzie chce utworzyc 'TplManager' jako potomka.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.