Cytat(fifi209 @ 27.03.2009, 19:23:41 )

Nie wiem czy to dobry dział.
Czytałem dziś od rana pełno tekstów/dyskusji na temat wzorów projektowych, pisania cms/frameworków. Lecz dalej nie wiem jak "ugryźć" tematykę pisania np. swojego cms.
Do tej pory wszystkie moje projekty, były oparte o różne klasy (oczywiście mojego autorstwa) które dawały wynik (stronę).
Skończyły mi się pomysły i teksty w internecie, których bym nie przeczytał.
Jakie założenia stawiałbym przy pisaniu cms?
- Obiektowo
- Elastycznie
Co chciałbym dać użytkownikowi do dyspozycji?
Dokładnie to co mu się podoba, chciałbym zrobić system pluginów/dodatków, które mógłby sobie sam pobrać i zainstalować.
Nie wiem nadal jak rozwiązać sprawę "komunikacji" klas między sobą.
Zastanawiałem się nad napisaniem jądra/kernela (była dyskusja o tym na php.pl), lecz nie mam zielonego pojęcia jakby miał działać.
Jak moim zdaniem wyglądać miałoby jądro i za co byłoby odpowiedzialne ?
- Zarządzanie klasami, które są potrzebne w danej chwili.
- Zarządzanie pluginami i ich wczytywanie w razie potrzeby.
Kolejnym problemem, który nie wiem jak ugryźć to obsługa wyjątków.
Pyt: Kiedy i gdzie będą mi potrzebne?
Odp: Wszędzie tam gdzie powstanie błąd uniemożliwiający dalsze działanie skryptu(ów).
Moim zdaniem, "łapanie" wyjątków nie zawsze jest proste i wygodne.
Chciałbym wiedzieć jak Wy rozwiązujecie te (może) banalne problemy.
Jeżeli chodzi o komunikację to wydaje mi się źe mugłbyś zadeklarować metodę bądź funkcję typu checkExist($Nazwa); - Która pobiera z bazy danych występowanie danego modułu i ewentualne odniesienie się do jego strony.
Jeżeli np: Miałbyś każdy moduł w osobnym katalogu i wiadomo że w każdym z modułów jest plik "index.php" to mógłbyś stworzyć strukturę danych posobną do tej:
CODE
SQL:
CREATE TABLE `Moduly`(`id` integer NOT NULL PRIMARY KEY, `nazwaModulu` varchar(20), `katalogRoboczy` varchar(20), versja varchar(5));
teraz możesz za każdym wywołaniem funkcji sprawdzić i ewentualnie pobrać lokalizację pliku "index.php" a nawet zaimplementować funkcję sprawdzającą czy dana wersja modułu jest obsługiwana przez aktualną wersję twojego "modułu głównego" CMS.
możesz równierz zaimplementować serię stałych rozkazów w twoich klasach które one wykonją i przekazywać te rozkazy za pośrednictwem sesji $_SESSION albo ciastek $_COOKIE.
Powiedzmy że każdy z modułów obsługuję taką metodę jak "lista();" a każdy moduł robi inne rzeczy np :listuje użytkowników, listuje obrazy w galerji itp. Wystarczy że umieścisz zmienną $_SESSION["ORDER"]="LIST'; i wywołasz odwołanie do pliku index.php innego m,odułu. Wtedy możesz zrobić coś w stylu:
CODE
switch($_SESSION["ORDER"]){
case "LIST": {$klasa->metoda_wyswietlania_listy();}break;
}//end of switch
Podobnie ja robię przy moich CMS'ach, ale możliwe że są o wiele prostsze metody