Budowa prostego MVC w PHP (>5.3), cz. 1 – wprowadzenie do tematu
Killavus dnia Luty 14, 2011
MVC (Model-View-Controller) to jeden z najbardziej rozpowszechnionych wzorców projektowych wykorzystywanych przy projektowaniu front-endów aplikacji sieciowych. Jego niewątpliwą zaletą jest fakt, że możemy rozdzielić 3 najważniejsze „części” programu – prezentację, pobieranie danych, oraz manipulowanie nimi. Staje się to przydatne najbardziej, gdy nad projektem pracuje kilka(naście) osób – graficy nie potrzebują zaawansowanej wiedzy programistycznej, by wyświetlać treść w swoich projektach, specjaliści od bezpieczeństwa nie muszą zajmować się wewnętrznymi szczegółami dotyczącymi pobierania danych, gdyż nieistotne jest dla nich, czy pochodzą one z pliku, bazy danych czy jeszcze innego źródła, zaś programiści mogą przygotować metody zbierania danych, zachowując przy tym taki sam interfejs niezależnie od ich źródła. Ponadto szukanie błędów w takiej aplikacji jest prostsze – dzięki rozdzieleniu warstw możemy szybko i sprawnie wyszukać która część odpowiada za problem i wydelegować do jego rozwiązania odpowiedni sztab ludzi.
Mimo tego, że napisanie aplikacji w oparciu o ten model wydaje się skomplikowane, wcale takie nie jest. Wystarczy wiedza z zakresu obiektowo-orientowanego programowania w dowolnym języku (my wybierzemy PHP) i trochę cierpliwości. W tym artykule postaram się odpowiedzieć na pytanie, jak stworzyć pierwszą część takiego wzorca – Model danych. Opowiem też o tym, za co odpowiada która część i dlaczego kod, który napiszemy nie działa na 90% polskich hostingów. Zatem do dzieła!
Model… View… Controller? O co w tym wszystkim chodzi?
Być może dziwne nazwy, które zawarte są w nazwie tego wzorca mogą odstraszać, ale nie jest to wcale trudna rzecz. Przedstawię tutaj pomocniczy schemat, który na przykładzie bloga przybliży Wam, w czym rzecz.
Myślę, że powyższy schemat dość dobrze pokazuje, o co w tym wszystkim chodzi. Zapytanie przekazywane jest do kontrolera, kontroler przetwarza je, pobierając z modeli te dane, które są mu potrzebne (być może nie tylko dane wpisu – może też dane autora, komentarzy itp.) i przekazuje wykonywanie dalej, do widoku (view).
Dla tych, do których przemawia jedynie kod, przedstawiam mały, poglądowy kod jak mogłoby to wyglądać (pomijam tutaj model):
Kontroler:
<?php class PostController extends ControllerHandler { // ... public function view( $id ) { $post = new Post($id); if( !$post ) { // wpis o tym ID nie istnieje. $this->error('404'); return; } $this->viewVars['post-content'] = $post->content; // Potrzebujemy tresc wpisu $this->render(); // Przekazujemy wykonanie do widoku. } // ... } ?>
Widok:
<h1>Wpis na blogu:</h1> <?php echo $v['post-content']; ?>
Jak widzimy, pobieranie danych i ich walidacja (przykładem jest tutaj wywalenie błędu, gdy nie ma wpisu o ID 12 jest realizowane w kontrolerze, zaś widok zajmuje się tylko wyświetleniem danych na ekran.
Szczegóły implementacyjne
Wiemy już, jak to powinno działać. Pozostaje pytanie – jak to zaimplementować? W następnych częściach naszego artykułu przejdziemy do konkretów, implementując każdy szczegół z osobna.
Do napisania!

Zostaw komentarz