Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Programowanie Komponentowe
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
bumelang
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?
zYm3N
$klasa::funkcja();

powinno chodzić. :-)
jaco
a nie $instancja->funkcja() ? winksmiley.jpg
hawk
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.
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.