![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
W systemie MVC tylko modele powinny być obietami - do takich wniosków doszedłem. Czy słusznie ?
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
skad taki wniosek?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie słusznie. Zazwyczaj w MVC wszystko jest oparte na klasach, popatrz choćby na Zend Framework.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Modele bardzo łatwo przedstawić za pomocą obiuektów dlatego świetnie się do tego nadają.
Widoki to poprostu powinny być pliki .phtm dlatego z obiektowośćią nie mogą mieć nic wspólnego. Próby opakowania kontrolera w obiekt są wymuszone. Przykłąd: Klient zleca nam dobudowanie kalendarza w storpce strony. Kalendarz powinien się pokazywać w parzyste dni miesiąca, przy czym dla każdej wersji językowej musi mieć inny szablon kolorystyczny. Rozwiązanie: Jeden z modeli to komponent "kalendarz". Łatwo stworzyć obiekt Calendar- jest to naturalne. Widok to plik .phtml który wykorzystuje dane z modelu np "BlueCalendar.phtml". Kontroler powinien zająć się sprawdzaniem czy dziń jest parzysty, no i dla wersji jezykowej ładować odpowiedni szablon. Moje pytanie: Dlaczego miałbym pakować kontroler w obiekt? Czy nie wydaje się wam to wymuszone skoto kontroler to tak naprawdę tylko "switch"? Taki switch o nazwie "CalendarController.php" Powinien być poprostu includowany gdzieś na stronie. Ten post edytował Black-Berry 13.03.2009, 10:49:08 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
nie tylko switch. Aplikacja wybiera kontroler, a kontroler wybiera jakie skladniki bedą mu potrzebne. Pomysl ze chcesz zrobić dodawanie użytkownika i w nim wybór grupy z bazy danych
:] |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Dlaczego miałbym pakować kontroler w obiekt? Czy nie wydaje się wam to wymuszone skoto kontroler to tak naprawdę tylko "switch" ? Dzis pierwszy kwietnia ? (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
NuLL, piątek trzynastego, dlatego takie pechowe myslenie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
To ja może taką złotą myśl co usłyszałem niedawno od człowieka, który zajmuje się tworzeniem bardzo rozbudowanych aplikacji:
Łączenie kodu obiektowego i strukturalnego jest jak zabawa z plastikową lalką - do pewnego wieku (poziomu doświadczenia) to rzecz normalna, potem zaczyna to być chore i zboczone. Rzecz w tym, że z czasem liczy się przede wszystkim prędkość rozwoju aplikacji i jej utrzymania (sprzęt zawsze można dokupić - jest on tańszy niż praca profesjonalisty), a programowanie obiektowe potrafi znacznie przyśpieszyć tworzenie aplikacji (kod strukturalny jest ciężki w utrzymaniu kiedy się rozrośnie). Dlatego też warto ograniczać ilość kodu strukturalnego do niezbędnego minimum. ---- edit ---- Wiesz Black-Berry, kod który podałeś wydaje się brzydszy i mnie czytelny niż gdybyś go zawarł obiektowo w klasie. Ten post edytował Kocurro 13.03.2009, 10:57:54 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tak, tylko zwróć uwagę że w przypadku Web Developerki nie robi się 1 duzego projektu ale raczej dużo małych i czesto. Jeśli struktury obiektowe są ze sobą sztywno powiązane to za rok kiedy zadzwonią do Ciebie i każdą dodać jakiś plugin to może się okazać że przez ten sztywny projekt dodałeś sobie zbędnej pracy.
Wiesz Black-Berry, kod który podałeś wydaje się brzydszy i mnie czytelny niż gdybyś go zawarł obiektowo w klasie. Ale zgodzisz się chyba że kontrolery działają strukturalnie? Zwykłe przełaczniki. Dla mnie brzydkie wydaje się ukrywanie tego. Ten post edytował Black-Berry 13.03.2009, 11:04:35 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
black-Berry teraz żeby skontrolować np. uruchamiane akcje musisz dopisać np. kolejną zmienną.
Skąd masz zmienną $user? Ja metodą call, pobieram co wywolac, odczytuje jaki model/widok i jaką metodę. Mam łatwy dostep do bazy danych dziedzicząc z Syd_Application_Action (u mnie nazywa sie to action), gdzie ustawione są wszystkie motedy
Teraz przenieś to do swoich switchów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) EDIT: Tak wiem, model ma dostep do Db, ale ja rozdzielilem Update, Insert do akcji a pobieranie do Modelu. Najwazniejsze to $this->check(); oraz getInts/String itd. ;] Ten post edytował bim2 13.03.2009, 11:05:03 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Programuję w PHP'ie od 2003 roku, jeden projekt do dziś dnia u klienta aktualizuję. Błędem było napisanie go strukturalnie bo rozbudowa jego byłaby o wiele prostsza jakby był obiektowo napisany (fakt, że wtedy obiektowość w PHP kulała).
Dziś nie piszę dużo małych projektów, za to mam na utrzymaniu cztery duże i to mi wystarczy by żyć na odpowiednim poziomie i mieć sporo czasu dla siebie. --- edit ---- Jeśli dla Ciebie kontroler to zwykły przełącznik to znaczy, że w ogóle nie potrzebujesz obiektów do niczego. U mnie kontroler robi bardzo dużo, i zapisanie tego strukturalnie było masochizmem zamierzonym Ten post edytował Kocurro 13.03.2009, 11:06:02 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jeśli dla Ciebie kontroler to zwykły przełącznik to znaczy, że w ogóle nie potrzebujesz obiektów do niczego. U mnie kontroler robi bardzo dużo, i zapisanie tego strukturalnie było masochizmem zamierzonym Dążę do tego żeby kontroler robił jak najmniej - żeby był tą częścią aplikacji której nie da się upakować w żaden poziom abstrakcji. @bim2 Masz chyba podobne podejście do Kocurro. Kontrolery robią u Ciebie dużo. W moim przypadku dodawaniem np usera zajmuje się model - $user->manager->addAccout($args). Nie bardzo rozumiem przykąłd jaki podałeś. Dlaczego metoda addUserForm() miałaby tworzyć url do FAQ? Jeśli formularz miałby mieć w stopce link do FAQ to moim zdaniem powinno być to zawarte w widoku. Nie wydaje mi się też aby musiały istnieć procedury generujące linki. Próbuję tak ustawić .htaccess'a aby było to zbędne. Ten post edytował Black-Berry 13.03.2009, 11:21:13 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@Black-Berry, ja Ciebie tego nie uczyłem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Skąd ty wyciągnąłeś takie brednie.
Czemu uważasz, że np. widok nie powinien być obiektem? Przecież widok też posiada swoją wewnętrzną logikę, której w funkcje nie opakujesz... musi być obiekt. Spójrz chociażby na agavi, którzy obiektowść widoku bardzo uwypuklili: Creating Actions and Views Nie powinieneś również mylić szablonów z widokiem. To dwie różne rzeczy. Widok korzysta z szablonów i zależnie jaki to widok, to jako szablony możesz użyć plików PHP, Smarty, XSLT etc. @kocurro, wbrew pozorom kontroler dużo robić nie powinien. Istnieje taka zasada Kod skinny controller, fat model Kontroler nie znajduje się w tzw warstwie dziedziny (domain layer) i odpowiada raczej, za workflow aplikacji. Pozdrawiam Ten post edytował LBO 13.03.2009, 11:58:37 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
LBO: A co według Ciebie jest dużo ?
Uwierzytelniania, autoryzacja, routing, ładowanie modułów, obsługa błędów, obsługa wywołania akcji, obsługa łańcucha wywołań, obsługa cache'u jeśli jest używany - to jest mało ? To są zadania kontrolera (chociaż fakt niektóre są dzielone z modelami ale to głównie kontroler musi robić). To jest workflow aplikacji. O ile uwierzytelnianie i autoryzacji częściowo przeniesiona może być do modelu to jednak nie w całości. Dla mnie to jest właśnie bardzo dużo roboty. Fakt jeśli wziąć w garść wszystkie modele to one wykonują o wiele więcej roboty, jeśli jeszcze dołożyć do tego widoki to okazuje się, że faktycznie kontroler robi mniej niż procent. Ale czasem dwa promile mogą przesądzić o wszystkim. I jak chcesz to wszystko zapisać na switchach ? Bo dla mnie zapisanie tych wszystkich rzeczy, zależności tylko i wyłącznie na switchach byłoby masochizmem. pozdr. Łukasz |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Na switchach można oprzeć projekt gdy jest mały, a poszczególne kontrolery nie są ze sobą ściśle powiązane. Sam tak robiłem, szło nieźle, ale przekonała mnie łatwość modyfikacji kodu opartego na kontrolerze obiektowym i akcjach w jego metodach, bo nie musiałem dla każdego kontrolera dodawać oddzielnych linijek kodu w switchu, a w samym kontrolerze wybierać odpowiedniej akcji, a teraz zaczynam powoli wykorzystywać inne możliwości takiego kodu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Może trochę inaczej.
Powszechnie za nazwa "kontroler" zamiennie używana jest z "akcją" i taką nomenklaturę przyjąłem. Zgadzam się z tym co napisałeś, kontroler posiada pewne obowiązki, które spełniać musi (ale nie wszystkie, które wymieniłeś. O tym za chwilę). Zasada, która podałem odnosi się bardziej do operacji biznesowych, które niekiedy w całości przenoszone są do kontrolera/akcji (wystarczy przejrzeć nawet kilka postów na forum dot. ZF (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ). Co do deto co napisałeś o uwierzytelnianiu, cache'u routingu - nie są one częścią kontrolera. Poczytaj o wzorcu Intercepting Filter lub nawet obejrzyj, chociażby w sf, albo Agavi (w Agavi implementacja jest dużo lepsza IMHO). Pozdrawiam P.S. Ja o żadnym switchu nie pisałem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) wogóle się do Tego nie odnosiłem, bo jest śmieszne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za wszystkie posty. Przynjamniej moje intuicyjne założenie żeby maksymalnie ograniczyć kontolery było słuszne. Nie opakowuję ich w obiekty tylko inkludowane pliki bo jest szybciej. Dzieki temu nie musze przekazywać kontekstu, pobierać go, bawić się w opakowywanie metod.
@LBO Faktycznie chyba źle rozróżniam widok od szablonu dzięki za naprostowanie. |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nadal uważam, że źle robisz.... zobaczymy jak dojdziesz do takiego etapu kariery, że będziesz musiał testować kod (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Może masz rację ale bez eksperymentów nei ma postępu (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ... Liczę na to że kontrolery okroję do max 10 małych plików a wtedy może nie będzie tak źle. Obecnie mam:
RoutingController.php PostController.php ActionController.php BodyController.php Zawierają tylko switche. Z tego co zauważyłem nie zapowiada się aby było ich potrzebnych wiele więcej. Reszta to modele. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.09.2025 - 04:58 |