Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Eleganckie zastępowanie klas Frameworka
pitbull82
post
Post #1





Grupa: Zarejestrowani
Postów: 167
Pomógł: 0
Dołączył: 30.04.2004
Skąd: Częstochowa

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


Witam

Tworzę właśnie pewien portal, a przy okazji framework, który ma mi się przydać do dalszych zastosowań. Cały framework ma zastanowić zamkniętą skrzynkę klas w których nie będzie się nic edytowało, a ewentualną zmianę/rozszerzenie funkcjonalności będzie się osiągało poprzez dziedziczenie z klas bazowych/tworzenie nowych klas. Jak na razie wykombinowałem to tak, ze mam katalog system w którym znajduje się cały framework i katalog application/main w którym znajduje się kopia wszystkich klas frameworka i każda klasa (o ile nie wymaga zmiany funkcjonalności) wygląda tak:

Kod
namespace WebApp;

class JakasKlasa extends \Framework\JakasKlasa {
}


Jednocześnie we wszystkich plikach frameworka nie odwołuję się nigdy do przestrzeni Framework tylko zawsze do przestrzeni WebApp dzięki czemu osiągam to co chciałem - dowolna klasa frameworka może zostać w danej aplikacji zmieniona na inną czy to przez dziedziczenie czy to przez napisanie klasy od podstaw.

Minusy tego rozwiązania:

- wymuszam sytuację, że rozszerzenie frameworka musi znajdować się zawsze w przestrzeni WebApp (chociaż to chyba można by ruszyć poprzez ładowanie przestrzeni z plików konfiguracyjnych)
- wymuszam sytuację, że dla każdej klasy frameworka musi istnieć klasa w przestrzeni WebApp nawet jeśli nic szczególnego się w niej nie dzieje tzn. jeśli dziedziczy ona tylko po klasie z framworka

Pytanie do Was - co sądzicie o opisanym rozwiązaniu i czy można się jakoś prosto pozbyć drugiego minusa tzn. tworzenia w zasadzie pustych plików które nic nie wnoszą?

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dariuszp
post
Post #2





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.09.2010

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


Podstawiasz sobie nogę już w samych założeniach wg mnie. Sam budując system trzymałem się zasady KISS i sprawdza się ona świetnie.
Jeżeli mówisz o samym ładowaniu klas to czemu nie skorzystać z PSR-0 ? Sam wykorzystuję tę propozycję z małymi modyfikacjami i sprawdza się świetnie.
http://groups.google.com/group/php-standar...-final-proposal

Obrałem sobie przestrzeń App na moją aplikację i napisałem autoloader (spl_autoload_register zobacz czy jakoś tak). Chcę odpalić moduł ?

  1. $module = new Module\Shop\WebShop($this->App);


chcę odpalić część administracyjną modułu ?

  1. $module = new Module\Shop\AdminShop($this->App);


Trzeba mi bibliotekę "strzelGola" od Batmana ?

  1. $strzelGola = new \Batman\StrzelGola();


itp itd etc.

Autoloader działa gdy tworzysz nowy obiekt, działa gdy obiekt rozszerza inny obiekt. Biblioteki są zawsze ułożone wg schematu: katalog_z_bibliotekami/dostawca/nazwa.php za wyjątkiem modułów na który jest osobny katalog (co autoloader też pokrywa). Bez problemu działa to z takimi funkcjami jak class_exists itp więc w moim frameworku w ogóle nie używam include/require ręcznie.
Do tego o ile się orientuję, nazewnictwo PSR-0 staje się coraz bardziej popularne co właściwie gwarantuje mi że w przyszłości będę mógł wykorzystywać biblioteki od różnych dostawców i frameworków nie martwiąc się w ogóle o kompatybilność itp.

Mało tego, w ten sposób mogę sobie OD TAK załadować dowolny moduł, bibliotekę itp i należycie przetestować.

Radzę się zapoznać i samemu ocenić.
Pozdrawiam
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: 4.10.2025 - 06:28