Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Model MVC zbojkotowany.
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
Pulsar
Dzisiaj miałem średnio miłą sytuację. Otóż postanowiłem zainicjalizować wykorzystanie modelu MVC w nowym projekcie firmy. W tym celu przygotowałem wykład dla dyrekcji, oraz współpracowników i niestety zostałem zbojkotowany.

Niektóre argumenty które padły przeciwko temu rozwiązaniu to:

- zbyt duży rozmiar plików z klasami
- pochłanianie dużej ilości pamięci przy operacjach
- powolność rozwiązania, gdyż większość operacji wykonywana jest na obiektach (padło porównanie do powolności w Java)
- obiekty będą wykorzystywane ale w prostszy sposób, bez zbędnego komplikowania postulatami MVC

Powiem szczerze, że po tej dyskusji, jestem dosyć przygnębiony. Włożyłem w to dużo pracy, która poszła na marne.

Czy możecie mi przytoczyć jakieś mocne argumenty, dlaczego rozwiązanie oparte na MVC będzie lepsze? Co ogólnie o tym myślicie?
Imperior
Na mój gust, to MVC, nie daje nic prócz przejżystości i łatwości w rozszerzaniu funkcji, choć to i tak zależy od umiejętności i staranności programisty.
Zawsze można zrobić coś lepiej bez użycia MVC...
Moge się mylić, jeśli tak to wyprowadźcie mnie z błędu.
bregovic
Zalety MVC to nażucony pożądek w kodzie. Jeśli wykożystacie np [url=mojavi.org]Mojavi 3[/ur] (jeszcze troszkę beta, ale działa już pod php5!) to będziecie mieli znacznie ułatwioną współpracę - jedyne co będzie porzebne to ogólny plan aplikacji - nad strukturą nie będzie się trzeba zbyt zastanawiać bo większość dobrych frameworków nażuca bardzo dobrą strukturę - i daje mnóstwo różnych featuresów.
DeyV
Od dawna pracuję na MVC lub różnych wariacjach tego wzorca. Nie zawsze trzymam się go w 100% , z przekonaniem moge powiedzieć jedno - nie znam lepszego sposobu na pracę z kodem, szczególnie jeśli jest to praca zespołowa.

Czasami ludzie obawiają się tego terminu, mając wrażenie, że niesie on automatycznie znaczną komlikację kodu. Jednak tak nie jest - przecież widokiem może być dowolny system szablonów.

Czym natomiast jest model? |To przecież zwykły zestaw klas, w ktorych zawarte są wszystkie zapytania do bazy, wraz z przejżystym interfejsem.

Wszystko sprowadza sie do tego, że należy napisać ładne akcje, które to wszystko połączą, a dla ułatwienia - mają się automatycznie uruchamiać.


cdn. ...
Krolik
Trzeba bylo przedstawic im rachunek kosztow...
Mysle, ze zaoszczedzenie paru tygodni pracy dzieki modelowi MVC (bo bedzie mniej bledow, kod czytelniejszy i wszystko duzo ladniej) spokojnie pozwoliloby na zakup dwuprocesorowego Pentium IV XEON 3.8 GHz z 2 GB RAMu na ktorym chodzilby serwis. smile.gif

Fakt, ze moze php najszybsze nie jest, ale chyba obiektowosc tak duzo znowu nie spowalnia. Nie rozumiem tych ludzi. Nie wiem skad sie biora te mity, ze to niby obiektowosc i ladny kod sa niewydajne. I te glupie porownania do Javy. Nie, to nie obiektowosc, a co najwyzej niedbala implementacja. Program w C tez mozna napisac tak, ze bedzie zarl wiecej zasobow niz odpowiednik w Javie.

Zwykle im przejrzystsza struktura kodu, tym latwiej sie to pozniej optymalizuje.
Swoje zdanie opieram glownie na jezykach Object Pascal, C, C++ i Java, bo w tych mam duzo wieksze doswiadczenie niz w php. Jesli w php jest inaczej, to mnie oswieccie smile.gif
Pulsar
Czyli jednak moje podejście zastosowania MVC do nowej aplikacji było słuszne?

Moim zdaniem, ponieważ aplikacja będzie duża, poza tym będzie rozwajana na bieżąco przez przynajmniej 5 osób, to opłaca się zastosować MVC. To właśnie próbowałem przekazać.

Niestety bez powodzenia sad.gif
zezik
Ja bym to teraz rozegral tak:

Wymysl jakis problem, rozszerzenie etc. i przedstaw latwosc rozwoju aplikacji pod kontem danego problemu, jak i przedstaw to z poziomu rozwiazania bez wykorzystania modelu. Ja w taki sposob przekonalem sie do wzorcow projektowych, dobre przyklady o rozszerzeniach i poprawkach powalily mnie ;-) No i tym sie trzeba bronic. Prawda jest taka ze ludzie boja sie takich rozwiazan jako ze dosc czesto nie wiedza o co wogole chodzi, a tym bardziej ile problemow implementacyjnych bedzie.

Ale walcz, jestesmy z Toba biggrin.gif
NuLL
Pulsar: A jakiego MVC sie trzymasz - mowisz stricte o MVC questionmark.gif

Jesli chcesz za wszelka cene trzymac sie tego wzorca , to chyba podlacze sie do bojkotu. Pilnowanie sie MVC na wszelkie mozliwe strony jest lekko bezsensowne. Wiele osob nie zauwaza ze MVC opracowano dla JAVY i jak dla mnie gdyby ktos w firmie zaproponowal mi zaisywanie kodu kazdej akcji w osobym pliku wysmial bym go.

Pamietajmy ze aplikacja w php dzial max. kilkanascie sekund w przeciwienstwie do aplikacji Javovwych ktore dzialaja jak normalne pisane w C. Ja korzystam ze wzroca MVC - ale z jego glownych zarysow. U mnie np jest kontroler strony, ale akcje odpowiedzilane za jakis pojedynczy modul sa zapisane w jednym pliku.
bela
Cytat(null)
MVC opracowano dla JAVY

Cytat(hawk)
MVC nie jest pomysłem nowym. Wymyślony został w laboratoriach PARC (Palo Alto Research Centre) firmy Xerox (tych samych, którym zawdzięczamy m. in. myszki i systemy okienkowe) już w latach siedemdziesiątych. Wtedy oczywiście nikt nawet nie myślał o wykorzystaniu wzorca do aplikacji internetowych. MVC został wykorzystany do zaprojektowania interfejsu użytkownika w języku Smalltalk, stworzonym zresztą również przez PARC. To, co nas jednak interesuje, to zastosowanie MVC w aplikacjach internetowych. Tego kroku dokonał Sun na potrzeby Javy.


winksmiley.jpg
hawk
@Pulsar: opinie o zżeraniu pamięci, zbyt dużych plikach itd biorą się raczej z totalnej niewiedzy i niechęci do zmiany przyzwyczajeń.

Owszem, można pokazać, że system napisany na chama, bez obiektów, będzie szybszy niż to samo w MVC. Ale w takim razie dlaczego nie napisać wszystkiego jako CGI w C? Też się da i będzie znacznie szybsze. Tylko że projekt się nie uda winksmiley.jpg.

A jeżeli już zgodzimy się na obiektowość i porządek w kodzie, to MVC wcale nie musi być wolny. Wszystko zależy od tego, co chcemy tam mieć. Kontroler nie musi wprowadzać żadnego narzutu - wystarczy że URLe będą miały postać index.php?action=foo. I tak, i tak jakaś namiastka kontrolera musiałaby być. Wywalenie SQL z plików z akcjami do modelu to w zasadzie bardziej wymóg zdrowego rozsądku niż MVC. Lepiej mieć coś w jednym miejscu, niż rozsiane po dziesięciu...

Ciekawe, czy któryś z oponentów może zaproponować bardziej wydajne, a jednocześnie sensowne rozwiązanie? Są frameworki wyraźnie szybsze od tego co może zaoferować MVC? No chyba że alternatywa polega na robieniu wszystkiego byle jak - wtedy nic nie da się poradzić sad.gif.

@bela_666: winksmiley.jpg
Krolik
Nie wiem po co tyle gadania o tej wydajnosci. Jak chca miec super szybko to niech sobie napisza w czyms "natywnie kompilowanym" czyli C++ albo C. Tylko ciekawe ile czasu beda to pisac, bo bibliotek dobrych do tego nie ma... (na razie).

Jest kilka takich mitow dotyczacych wydajnosci glownie rozpowszechnianych przez ludzi, ktorzy nie znaja dobrze obu technologii ktore porownuja: "C++ jest wolniejsze niz C", "Garbage collectory sa wolniejsze niz malloc/free", "Java jest szybsza niz C" no i teraz jeszcze "MVC jest wolne". Kazdy z tych mitow da sie latwiej lub trudniej obalic, choc w kazdym jest jakies ziarnko prawdy.

Moim zdaniem ludzie sie po prostu boja uczyc nowych rzeczy. Wydajnosc jest chyba tylko pretekstem, zeby sie nie uczyc. To mi troche przypomina tez takie myslenie niektorych programistow C - "Nasi dziadkowie i ojcowie uzywali ansi C i funkcji malloc, to i ten system baz danych tez napiszemy w C...". Jak sie ktos przyzwyczail, to nie ma na niego sily. A w programowaniu bardzo latwo o nawyki i chodzenie "na skroty". Napisanie skryptu byle jak to wlasnie "chodzenie na skroty". Bedzie dzialac, ale jak zajdzie koniecznosc zmodyfikowania czegos po 2 miesiacach, to ja juz wspolczuje tym, co beda ten kod czytac.
squid
Cytat(hawk @ 2004-11-29 10:20:59)
Ale w takim razie dlaczego nie napisać wszystkiego jako CGI w C? Też się da i będzie znacznie szybsze.

wedlug testow z ksiazki "php zaawansowane programowanie" ( http://helion.pl/ksiazki/zprphp.htm ) niekoniecznie, php potrafi przewyzszyc inne rozwiazania jak CGI/c, CGI/PERL, mod_perl, mod_python
bela
a mógłbyś powiedzieć coś więcej o tych testach, bo nie każdy ma tą książke

i podaj numer strony to zobacze sobie w empiku winksmiley.jpg

Cytat(Krolik)
Jest kilka takich mitow dotyczacych wydajnosci glownie rozpowszechnianych przez ludzi, ktorzy nie znaja dobrze obu technologii ktore porownuja: "C++ jest wolniejsze niz C"


gdzie tak piszą ?
squid
nie mam tej ksiazki na wlasnosc, mam do nieje dostep na wydzialowej czytelni, postaram sie do piatku umiescic odpowiedni fragmet smile.gif badzcie cierpliwi

P.S.
w tej ksiazce jest caly rozdzail dotyczacy wydajnosci a te testy sa zaraz na jego poczatku, nietrudno wiec znalezc
Krolik
Nie pamietam gdzie dokladnie tak pisza, ze C++ jest wolniejsze niz C, ale co jakis czas spotykam sie ze stwierdzeniami: "Napiszmy to w C, to musi byc super szybkie". Jak pytam dlaczego nie w C++, to dostaje odpowiedz, ze "Cala ta obiektowosc C++ wprowadza strasznie duze narzuty" i tu jako argument pada przyklad jakiejs duzej i wolnej aplikacji KDE napisanej w C++. Zreszta niewazne, to zagadnienie na odrebny temat i niekoniecznie na to forum...

Co do CGI w C kontra php - no pewnie, ze bardzo latwo napisac program, ktory bedzie ponad 10 razy szybszy w php niz CGI. Daleko nietrzeba szukac: wystarcz zwykle "Hello world." Tyle, ze taki benchmark jest bez sensu. A im wieksza aplikacja, tym CGI bedzie sie zblizac wydajnoscia do php. W ktoryms momencie moze byc nawet szybsze. Zwlaszcza jesli kodu jest malo, ale duzo operacji do wykonania (np. jakies petle, jakies skomplikowane obliczenia). Tak czy inaczej CGI nie zalicza sie do zbytnio wydajnych technologii, bo kazde wywolanie to start nowego procesu.

Natomiast nic nie pobije szybkosci Fast-CGI pisanego w C. Tak na oko moze byc z jakies kilkanascie-kilkadziesiat razy szybsze niz php z akceleratorem. Ciekawe tylko, czy w tej ksiazce zrobili taki benchmark...
squid
Zaczerpnelem z elektronicznej wersji tej ksiazki
Niestety nie mozna uzywac html'a na tym fotum wiec musi wygladac to tak:
Cytat
The tests were done on:

CGI Perl scripts
The traditional way to code web sites and applications just one or two years ago

FastCGI Perl scripts
A mechanism to improve the performance problems of CGI scripts

Python CGI scripts
In this case we used Python to code CGI scripts

mod_python Python scripts
An Apache module to let Apache run Python code without calling the Python interpreter

C CGI scripts
Compiled C scripts running as CGI programs

mod_perl Perl scripts
An Apache module to let Apache run Perl scripts without having to execute the Perl interpreter

php
To compare the other languages to php, the same test were run on php

After several benchmarks, including different script types and server loads, it was found that mod_perl, FastCGi, and php were the fastest options with very similar results. Therefore, if a php site or script is facing a performance problem then the solution is to work with the code and not change the language.

The Benchmarks
Test 1 – 1000 executions of a very short script:

Language
Time (seconds)

C
20.6

Perl
23.8

Python
45.2

php
16.0

mod_python
30.0

mod_perl
16.4

FastCGI
16.4


Test 2 – 1000 executions of a long script, more than 1000 lines of code:

Language
Time (seconds)

C
258

Perl
963

Python
978

php
304

mod_python
347

mod_perl
476

FastCGI
280
bela
szkoda, że nie ma fastcgi c w tym porownaniu
squid
ano nie ma aczkolwiek przed tym postem nie slyszalem nic o FastCGI w C widac malo przyjazne. Bardziej brakuje mi porownania php jako CGI i jako modol serwera Mozna sie spodziwac rezultatow nie wiekszych niz 200 w drugim tescie. Swoja droga nie mozna czegos takiego jak FastCGI zastosowac w php?
bela
Cytat(squid @ 2004-12-09 22:40:12)
ano nie ma aczkolwiek przed tym postem nie slyszalem nic o FastCGI w C widac malo przyjazne. Bardziej brakuje mi podownania php jako CGI i jako modol serwera Mozna sie spodziwac rezultatow nie wiekszych niz 200 w drugim tescie. Swoja droga nie mozna czegos takiego jak FastCGI zastosowac w php?

chyba coś ci się myli
gdy jest używane cgi to przy każdym wywołaniu strony tworzony jest nowy proces, w przypadku fastcgi nie są tworzene 2 procesy dla jednej strony tylko używany jest jeden
DaNTe
MVC i tylko MVC w takiej czy innej formie. Oddzielenie logiki od prezentacji to podstawa nawet malych projektow grupowych, o duzych i mających się rozwijac - to już nawet nie wspominam!

Co do wydajności - zamiast pakować pieniądze w dodatkowe P4 można zastanowić się nad zainwestowaniem w Zend Optymizera czy po prostu instalacją http://www.phpaccelerator.co.uk/. Kod kompilowany jest wtedy raz i utrzymywany w pamięci, co więcej - jedna instancja dla wszystkich klientów.

A co do przekonywania: zawsze należy się tak przygotować aby na każdą wade mieć riposte w postaci 2 zalet biggrin.gif
squid
Cytat(bela_666 @ 2004-12-09 22:47:55)
Cytat(squid @ 2004-12-09 22:40:12)
ano nie ma aczkolwiek przed tym postem nie slyszalem nic o FastCGI w C widac malo przyjazne. Bardziej brakuje mi podownania php jako CGI i jako modol serwera Mozna sie spodziwac rezultatow nie wiekszych niz 200 w drugim tescie. Swoja droga nie mozna czegos takiego jak FastCGI zastosowac w php?

chyba coś ci się myli
gdy jest używane cgi to przy każdym wywołaniu strony tworzony jest nowy proces, w przypadku fastcgi nie są tworzene 2 procesy dla jednej strony tylko używany jest jeden

wiem na czym polega fastCGI ale nie rozumiem jak sie to ma do mojej wypowiedzi
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.