![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 359 Pomógł: 1 Dołączył: 16.04.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam, piszę sobie frameworka. Na razie jest dosyć 'mały' i niedopracowany. Wszystko oparte jest na MVC. No ale dobra do rzeczy. Przemyślałem kilka spraw i wymyśliłem kilka ciekawych rzeczy, a mianowicie:
1) Forwardowanie akcji. Forwardowanie akcji, jest bardzo przydatną rzeczą w każdym frameworku, ale nie spotkałem się jeszcze z forwardowaniem na kilka akcji 'z góry', a myśle że to jest dośc przydatne, bo możemy poprzez jedną akcje zaplanować co i jak sie stanie. Wiadomo, że jeśli mamy akcje 'dodajNewsa' to rzeby zrobić 'dodajNewsaiPokaz' musimy tworzyć nową akcję, tak samo 'dodajiWyloguj' , a co bedzie jak zrobimy 'dodajWylogujPrzejdznaStroneGlowna' ? to jest tworzenie akcji, które już mamy(np. wyloguj) i dodawanie do nich jednej linijki (stare proceduralne kopiowanie kodu?). A jak mamy forwarodwanie na kilka akcji z 'góry' to jest super bo tworzymy sobie tylko 'Dodaj' 'Wyswietl' 'Wyloguj' 'PrzejdzNaStroneGlowna'. (Może przykład wyłuskany, ale nie umiem na szbyko wymyśleć innego). Ja rozwiązałem to sobie w taki sposób, że mam klase 'ActionCollectioner', która implementuje sobie Iterator :
w Routerze umieściłem sobie pętlę foreach(), do której podaje mój ActionCollectioner:
Dispatcher odpala kontroller akcji, a w nim możemy skorzystać z metody rodzica pushNextAction, która odwołuje sie do FrontController'a (który jedyny we frameworku jest singletonem) trzymającego dostęp do ActionCollectioner:
oczywiście pokusiło mnie żeby sprawdzić, co się dzieje jeśli przekieruje akcje z widowkiem, na akcje z widokiem - i co wyświetla sie tylko pierwsza akcja z widowkiem - czemu - zastosowanie funkcji require_once() w systemie, który przetwarza widok (pokazuje tylko raz, a że mam Template i i subTemplate - czyli główny szablon www i 'srodkowa tresc' zasysa raz Main.php i już dalej nie). Dodam, że korzystam z szablonów php. Jedyne co pozostaje to stworzyć MAX_FORWARDS, aby akcje bez widoku sie nie zapętlały. 2) Kolejna sprawa - Model. Zauważyłem, że w niektórych frameworkach Baze danych rejestruje się we FrontControllerze... Pyanie po co, to chyba gryzie się z ideologią MVC (może jest wygodne dla programisty, który tworzy aplikacje na tym frameworku, ale mało elastyczne). Ja postanowiłem problem rozwiązać w inny sposób, a mianowicie: mam rodzica dla każdego modelu:
dodam iż funkcja setDataSource wygląda takowo iż używam magicznego __autoload() więc nie trzeba podawać ścieżki do DataSource, aby działało - wystarczy umieścić go w katalogu core, który na początku jest skanowany (proszę mi nie mówić, że spowalnia to aplikacje, bo czas wykonania różni sie o okolo 0.005 s, a jest bardzo wygodne) No dobra, ale do rzeczy teraz mam model :
i myśle, że to jest rozwiązanie optymalne, bo jak zeche korzystać z pliku, a nie z bazy to robie:
No tak więc to by było na tyle, proszę o komentarze do moich pomysłów i z góry dziękuję za pomoc. Pozdrawiam... Kamil |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Ad 2. IMHO, model nie powinien byc dziedziczony. Na pewno nie z klasy Model. Dlatego, ze 2 modele moga tak znaczaco sie roznic, ze nie ma mniejmniejszego sensu. I co wazne - model wie skad powibiera dane. Wie ze jest to baza danych mysql na serwerze tym i tym. Taka ideologia mvc. Oczywiscie robic w kazdym modelu nowy obiekt bazy danych, wczytywanie konfiguracji dla polaczenia z baza itp jest bardzo niewygodne. Mozna zrobic dla ulatwienia Model_MySQL i z niego dziedziczyc. Adrian. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 359 Pomógł: 1 Dołączył: 16.04.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mozna zrobic dla ulatwienia Model_MySQL i z niego dziedziczyc. I co ![]() ![]() ![]() ![]() -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Popieram NuLL'a - zrób większą abstrakcję do źródeł danych.
Pozdrawiam -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Za poprzednikami.. zapytania do bazy danych powinieneś przynajmniej wydzielić do osobnej klasy.
Poza tym tak jakoś niechlujnie to opisałeś masa błędów stylistycznych, literówek, anglojęzycznych wstawek (kiedy istnieją polskie odpowiedniki).. nie wiem może dla wielu jest to trendi dżezi.. ale na pewno to ogranicza czytelność i trudniej jest się połapać w tym co chcesz przekazać.. wszystko zależy od tego jaki był cel tej publikacji. Jedna drobna rzecz.. jaki ma cel taki kod: Kod public function pushAct(DispatcherToken $oDispatcherToken) { if(!($oDispatcherToken instanceof DispatcherToken)) { throw new ActionCollectionerException('Parameter You given to pushObj must be instance of DispatcherToken.'); } array_push($this->_aActions, $oDispatcherToken); } Przecież jeśli $oDispatcherToken nie będzie instancją DispatcherToken php na wstępie wywali Ci fatalny błąd. W żadnym wypadku wyjątek nie zostanie wyrzucony. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 338 Pomógł: 2 Dołączył: 4.03.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
I co ![]() ![]() ![]() ![]() Kto jak kto, ale Ty chyba wiesz, ze SQL postgre i SQL MySQL jednak sie roznia... Wiec jak napisze Model ktory korzysta z mysql, a pozniej musi zmienic baze, to najpierw zmieni zapytania :] Adrian. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 359 Pomógł: 1 Dołączył: 16.04.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Za poprzednikami.. zapytania do bazy danych powinieneś przynajmniej wydzielić do osobnej klasy. Poza tym tak jakoś niechlujnie to opisałeś masa błędów stylistycznych, literówek, anglojęzycznych wstawek (kiedy istnieją polskie odpowiedniki).. nie wiem może dla wielu jest to trendi dżezi.. ale na pewno to ogranicza czytelność i trudniej jest się połapać w tym co chcesz przekazać.. wszystko zależy od tego jaki był cel tej publikacji. Jedna drobna rzecz.. jaki ma cel taki kod... ok ten fragment kodu jest zbędny. A co do opisu - pisane na szybko - to nie miał być artykuł. Pozdrawiam. Kamil |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Modele proponuję załatwić przez interfejsy + dao.
Tzn. Interfejsy Author, AuthorDAO. Metody Author - setName, getName, setId, getId, save Metody AuthorDAO - getAuthorByName, getAuthorById, getAll Do tego klasy implementujące ten interfejs: SQLAuthorDAO oraz SQLAuthor z implementacją opartą na PDO. Tworzenie modeli możesz załatwić w kontrolerze. W ten sposób, możesz dodać model obsługiwany przez inną technologię (np dane z XML a nie z bazy). -------------------- Łukasz Dywicki
Independent Java and open source software consultant. Blog - Java, OSGi, integracja oprogramowania.. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 22:35 |