![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 10.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
"'Template' jest przodkiem klasy sterujacej 'TplManager'" -> odpowiedziales sobie na wazne pytanie... dziedziczenie
![]() -------------------- ![]() "Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski) dev: gazeta.ie |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 10.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
To jest moje załozenie. W pierwszej metodzie chce utworzyc 'TplManager' jako potomka.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:56 |