PDA

Zobacz pełną wersję : Front Controller oraz MCV



Robster
21-03-2010, 13:48
Szukam informacji na temat Front Controller oraz MCV w podejściu praktycznym oraz teoretycznym. Znalazłem kilka stron w sieci na ten temat, ale w większości są to krótkie blogi, z których można co najwyżej tępo skopiować kod i zobaczyć co się dzieje.

Byłbym wdzięczny za jakieś linki oraz informacje o książkach, traktujących w tym temacie. Myślę, że większość osób związana z Joomlą od dłuższego czasu orientuje się w temacie i może udzielić kilku cennych wskazówek.

Pozdrawiam

f1xer
22-03-2010, 22:15
Postaram się napisać wszystko od początku zgodnie z tym co mi wiadomo (co nie zawsze może być słuszne i zapraszam do dyskusji), MVC to wzorzec projektowy pozwalający podzielić naszą aplikację na Model (Model) View (Widok) Controller (Kontroler), każda ze składowych tego wzorca odpowiada za inne zadania. Ogólne założenie jest takie że kontroler działa w sposób następujący:

1. Analiza żądania
2. Wczytanie modelu / manipulacja danymi
3. Wczytanie widoku i jego wyświetlenie

Model to część odpowiedzialna za logikę biznesową w zależności od potrzeb możemy przygotować kilka modeli to który model zostanie wczytany zależy od Kontrolera. Oddzielenie modelu od kontrolera pozwala w każdym momencie zmienić źródło danych, wystarczy model korzystający z mysql przepisać na taki korzystający z xml i aplikacja będzie działać dalej (pod warunkiem zachowania nazw metod modelu), tworząc model należy pamiętać o tym że ma on tylko ZWRACAĆ ZBIÓR DANYCH nie może on nic wyświetlać.

Widok, to część która pozwala wyświetlić nam dane przy czym nie zawsze musi on tworzyć kod HTML, jego zasada jest prosta pobiera on model i dane z tego modelu a następnie formatuje je i wyświetla. W joomli mamy jeszcze layouty widok wczytuje dany layout który prezentuje dane z widoku, layout może prezentować dane w dowolnej formie.

ok tyle teorii, czas na coś praktycznego i joomlowskiego.

controller.php



defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.application.component.controller') ;

/*tworzymy klasę naszego kontrolera, jest to rozszerzenie klasy JController */
class pierwszyController extends JController {

function display(){
parent::display(true) //wywołujemy domyślny widok, metoda display jest wykonywana domyślnie
}

/*metoda zapisz, implementuje nam zachowanie w przypadku żądania typu index.php?option=com_pierwsz&task=zapisz*/
function zapisz(){

$model=$this->getModel('pierwszy'); //pobieramy model o nazwie pierwszy
$dane = JRequest::get('post'); //pobieramy dane wysłane za pomocą metody POST
$model->zapiszDane($dane); //wywolujemy metode zapiszDane z naszego modelu
/*Tutaj powinna być kontrola czy dane zostały właściwie zapisane itd. nie będziemy utrudniać */
$widok=$this->getView('pierwszy'); //pobieramy widok pierwszy
$widok->display(); //oddajemy resztę pracy plikowi views/pierwszy/view.html.php
}
}
jak widać kontroler wcale nie jest taki straszny, słów kilka o getView, jeżeli wywołamy ją tak


$widok=$this->getView('widok','pdf');
wówczas zostanie wczytany plik view.pdf.php który może generować dokument PDF

podałem przykład tylko kontrolera, mam nadzieje, że nieco przybliżyłem temat nie dokonując rażących pomyłek, materiał pisany z głowy, jeżeli masz mniej szerokie pytania chętnie odpowiem :).

Robster
22-03-2010, 22:36
Dzięki @f1xer za zainteresowanie tematem.
Chętnie skorzystałbym z twojej oferty pomocy już w tej chwili, niestety moja widza na temat FC i podległych mu tematów, jest jeszcze zbyt mała bym mógł zadać Tobie nieco bardziej sprecyzowane pytania.

Nieco więcej czasu na zagłębienie się w temat będę miał dopiero za jakiś tydzień, dlatego teraz z grubsza przeczytałem to co znalazłem w sieci. Moje PHP kuleje, a najbardziej lubię się uczyć przez praktykę z późniejszym lub na bieżąco, doczytywaniem teorii.
Chciałbym napisać coś w rodzaju CMS'a dla elektronicznego systemu bankowego. Coś naprawdę prostego, gdzie można by dodawać użytkowników (klientów), adminów (pracowników), dokonywać przelewów, pożyczek, podgląd konta, zliczanie odsetek... itp.
Wybrałem do tego celu Zend Framework głównie z tego powodu, że znalazłem całkiem niezły tutorial dla zielonych w tym temacie (http://zend-framework.web-portals.pl/).

Niemniej Gdybyś posiadał @f1xer jakieś materiały lub mógł polecić ciekawe książki, które wprowadziłyby mnie w temat FC z nastawieniem na tworzenie CMS'ów, to byłbym wdzięczny.

Gdy tylko dowiem się więcej w tym temacie i pojawią się skonkretyzowane problemy, nie omieszkam się spytać o Twoje zdanie w tym temacie :)

malkowitch
30-03-2010, 19:30
Jeżeli nie kuleje u Ciebie angielski to możesz zajrzeć tutaj:
http://docs.joomla.org/Developers#Components

Bardzo dużo o programowaniu w Joomla. Ewentualnie możesz zacząć od modułów. Na blogu ostatnio pisałem trochę o nich:
http://www.b-support.pl/blog/8-joomla-programowanie/32-pisanie-modulu-joomla-cz1.html

Robster
30-03-2010, 19:51
Nie sądziłem, że jeszcze ktoś do tematu zajrzy :D
Dzięki @malkowitch.

Czym więcej wiem w tym temacie, tym bardziej zdaję sobie świadomość na co się porwałem :) Bardzo rozbudowany temat, a szeroka wiedza o obiektowym php jest niezbędna.

malkowitch
30-03-2010, 20:02
Powoli będę pisał na blogu o programowaniu w Joomla krok po kroku tak jak z tym modułem ale to potrwa bo jak wiadomo wszyscy tak czy siak musimy pracować.

W miedzy czasie możesz spróbować poszukać informacji tutaj: http://www.wromanek.info/artykuly/16-kurs-pisania-komponentow-dla-joomla-15-mvc.html

Robster
30-03-2010, 21:52
Będę regularnie zaglądał na bloga. Takie strony/blogi są naprawdę świetnym źródłem wiedzy, szczególnie jeśli autor wie o czym pisze.

Stronę Wojciecha odwiedzam od około 4 miesięcy. Bardzo dobra pozycja dla ludzi interesujących się programowaniem. I oczywiście chyba najlepiej opisane zagadnienie MCV i Front Controllera jakie znalazłem w sieci.