Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Programowanie Komponentowe
bumelang
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 30.11.2003

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


Witam wszystkich forumowiczów,

Trochę mnie tu nie było, ale przyglądam się właśnie php 5, po raz pierwszy zastanawiam się nad praktycznym wykorzystanie OOP w php i chodzi mi po głowie szatański pomysł na budowę aplikacji wielokrotnego wykorzystania, który chciałem z Wami przedyskutować.

Weźmy przykład sklepów, które piszemy raz a potem adoptujemy do potrzeb konkretnego klienta. Chcemy przy tym zachować odpowiednią separację logiki bazowej sklepu od logiki na potrzeby konkretnego klienta, żeby np. błąd poprawiony w konkretnej wersji bazowej od razu można było poprawić w konkretnym sklepie bez copy & paste'a.

W php można w wygodny sposób stosować programowanie oparte o komponenty, czyli np. piszemy plik Koszyk.class.php, w którym zawarty jest bazowy koszyk. Następnie piszemy klasę KoszykDlaKlientaA.class.php, która rozszerza pierwszą klasę i tym różni się od Koszyk.class.php, że podaje wartość koszyka bez podatku VAT.

Następnie tworzymy plik CompManager.class.php:

  1. <?php
  2.  
  3. // include(Koszyk.class.php); - to podmieniamy z wersji bazowej na:
  4. include(KoszykDlaKlientaA.php);
  5.  
  6. class CompManager {
  7. static function getKoszykInstance(){
  8. // było return new Koszyk;
  9. return new KoszykDlaKlientaA;
  10. }
  11. }
  12.  
  13. ?>


Czy z tym static w php dobrze zrozumiałem to nie wiem, bo manual jest dość ograniczony, ale chodzi mi o to, żeby można było zrobić
  1. <?php
  2.  
  3. $koszyk = CompManager->getKoszykInstance();
  4.  
  5. ?>

bez tworzenia konkretnej instancji obiektu CompManager, ale nie jest to wymagane. I tym sposobem mamy specyficzną dla danego systemu instancję klasy zawsze daną jak wyżej.

I teraz właściwa prośba: czy ktoś ma jakieś komentarze, uwagi, sugestie? Być może są fajne frameworki do tego typu zastosowań, podobne do Spring Framework lub WW2 w Javie, których nie znalazłem, a być może ktoś ma szersze doświadczenia z taką architekturą i zechciałby się nimi podzielić ze mną i resztą forumowiczów?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
zYm3N
post
Post #2





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 29.08.2004
Skąd: POLAND

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


$klasa::funkcja();

powinno chodzić. :-)
Go to the top of the page
+Quote Post
jaco
post
Post #3





Grupa: Zarejestrowani
Postów: 115
Pomógł: 1
Dołączył: 15.01.2003

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


a nie $instancja->funkcja() ? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
hawk
post
Post #4





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


1) Olej funkcje statyczne, przecież chciałeś mieć OOP. Zrób sobie normalny singletonowy rejestr i tyle. Takie wykorzystanie funkcji statycznych jest złe. Obiekt to jest "coś", a jak nie masz w ogóle obiektu to te zmienne statyczne są zawieszone w próżni. Nie można nawet tego zserializować...

2) Jeżeli już ma być taki CompManager, to absolutnie nie taki, gdzie trzeba za każdym razem grzebać w kodzie. I zmiana jednego koszyka wymaga kilku modyfikacji. W końcu system się rozwali, zrobisz błąd, pogubisz się, itd. Zrób sobie po prostu plik XML ze specyfikacją komponentów i generuj z tego kod php, przy okazji walidując czy nie wpisano nie istniejącej klasy. Przewagi takiego rozwiązania są oczywiste i niezliczone. A skoro PHP5, to masz masz bardzo dobrą obsługę XML i napisanie takiego parsera jest banalne.
Go to the top of the page
+Quote Post

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: 23.08.2025 - 22:54