![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 6 Dołączył: 9.04.2007 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Hej!
W celu lepszego zrozumienia idei MVC postanowiłem troszkę się pobawić i korzystając z wielu dostępnych mi źródeł napisać coś na wzór pseudo-MVC-frameworka. Mam jednak parę pytań, z czego najważniejsze to czy to się w ogóle trzyma kupy? Autoloader wygląda następująco: Mam taki pseudo "front Controller", który ma za zadanie odpalenie odpowiedniego kontrolera na podstawie $_SERVER['request'] i wygląda on tak: Klasa Controller, po której dziedziczy każdy kontroler wygląda natomiast tak A klasa Template, która odpowiada za wczytanie i wyrenderowanie odpowiedniej templatki (jest dość primitywna)
Jeśli komukolwiek udało się przebrnąć przez te linijki kodu mam 3 pytania: a) Czy udało mi się uchwycić ideę OOP (IMG:style_emoticons/default/cool.gif) Czy udało mi się uchwycić ideę MVC c) Co mogę poprawić, żeby kod był bardziej OOP/MVC. Przepraszam za chaotyczność (?) tego postu ale mam grypę i logiczne myślenie jest ciężkawe :<. Pozdrawiam i z góry dzięki, Vielta |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 450 Pomógł: 84 Dołączył: 27.11.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Trochę dziwnie na moje oko rozwiązałeś sprawę front controllera, ja u siebie mam zadania routingu/walidacji rozbite na dwie klasy - router oraz dispatcher. Dla tej pierwszej przekazuje w argumencie query string i po wykonaniu dostaje od niej ostateczne dane. Tworzenie obiektu i wywoływanie akcji zrzucam właśnie na klasę front controller. W nim tworzę obiekt dispatcher-a i on sprawdza czy żądany kontroler/akcja istnieje (oraz czy jest poprawny - przydaje się tutaj ReflectionClass) jeżeli tak załącza odpowiedni plik i po utworzeniu obiektu kontrolera odpalamy akcję. Co do autoloader-a to ja to rozwiązałem w ten sposób, że nazwy klas zapisywane są w stylu "underscore", bardziej po zendowsku (IMG:style_emoticons/default/biggrin.gif) Przykładowo z ciągu af_Database_Interface_QueryBuilder usuwam prefix "af" i podkreślniki zamieniam na ukośniki, konwertuje na małe znaki i dostaję ścieżkę "/database/interface/querybuilder". W taki sposób autoloader elegancko odnajduje sobie poprawną ścieżkę. Oczywiście nie musisz robić tego w sposób jaki podałem. Luźne sugestie (IMG:style_emoticons/default/winksmiley.jpg)
pozdrawiam edit: Cytat Cytat TYPE HINT zdecydowanie możesz użyć w metodach gdzie wymogiem jest przekazanie obiektu. Np w twoim addTemplateHelper. Przecież w PHP nie da się go nigdzie indziej użyć (no... tam jeszcze tablice, ale to śmiechu warte jest :]) urok tego języka (IMG:style_emoticons/default/biggrin.gif) nie ma to jak dodać obsługę dla obiektów/tablic i zapomnieć o reszcie Ten post edytował Quantum 8.09.2010, 18:40:18 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 13:16 |