Forti
19.09.2014, 11:58:38
Tak, wiem, pewnie ktoś zaraz wyskoczy, że odpowiedź znajde w google. Jednak przeszukiwałem i nie znalazłem.
Chodzi o proste pytanie. Przeglądam sobie artykuły o mvc, analizuje przykłady i teorie - wszędzie piszą, aby używać struktury folderów:
- model
- controller
- view
Wszystko fajnie pięknie. Jednak gdy zaglądam do frameworków (yi, CI itp.) na github, to ich struktura jest dla mnie jednym wielkim bałaganem, jeżeli chodzi o model - controller.
Znalazłem odpowiedź, że przy dużych projektach, struktura folderów model - controller - view jest trudna w utrzymaniu itp. Jednak konkretów brak. Może jest tu ktoś, kto potrafi to jasno wyjaśnić?
Pyton_000
19.09.2014, 12:03:50
Controller, View zostaw tak jak jest, a model przenieś np. tak:
/Acme
- Forms
- Validators
- Enities
- ....
destroyerr
19.09.2014, 12:12:13
Tutaj nie ma nic do wyjaśniania. Jeżeli dla Ciebie i dla autorów tych artykułów definicją architektury jest struktura folderów to jest to niepoważne. Jeżeli pytasz o wzorzec MVC to definiuje on tylko zadania poszczególnych warstw i kierunki komunikacji pomiędzy tymi warstwami. Pobieżnie rzuciłem okiem na CI i nie widzę tam bałaganu, więc postaraj się o konkretniejsze pytania.
Dziwną sprawą jest budowanie swojego doświadczenia z programowaniem obiektowym na podstawie CI.
Turson
19.09.2014, 12:13:51
Cytat
Jednak gdy zaglądam do frameworków (yi, CI itp.) na github, to ich struktura jest dla mnie jednym wielkim bałaganem, jeżeli chodzi o model - controller.
Przecież Yii na strukturę:
-controllers
-models
-views
Forti
19.09.2014, 12:19:28
To ja jeszcze wielu rzeczy nie rozumiem z tego

nie zawracam, ide dalej analizować kody i czytać teorie.
Pyton_000
19.09.2014, 12:30:17
Struktura to tylko pomoc w organizacji.
To tak jak z szafą na ubrania. Układasz jak Ci wygodnie a nie patrzysz na to kto jak robi. Są lepsze sposoby i gorsze. Eksperymentuj.
Magan
19.09.2014, 12:35:43
W moim frameworku to wygląda np. tak:
system/
class/ (kontroler - "main", dblayer, config_manager, sqlcache, userManage itd.)
(pozostałe)/
plugins/ (hooki)
templates/ (view)
php/ (model)
(inne)/
gitbejbe
19.09.2014, 12:57:39
@UP
fuuuuuu, ale brzydko
Magan
19.09.2014, 13:11:15
Fuuuuu, wersja wstępna, ale proszę bez offtopu. O gustach się nie dyskutuje, chciałem tylko potwierdzić zdanie przedmówcy odnośnie porównania struktury do szafy - tak jak wygodniej. Aczkolwiek mój framework jest tak skonstruowany, że zmiana struktury katalogów nie będzie wymagała dużo pracy, ot zmiany kilku inii kodu. Poza tym nie chodzi mi o to, by się chwalić, chodzi o to, by pokazać że może być tyle sposobów programowania ile osób interesuje się tą tematyką.
PS.: Mam również nadzieję, że nie miałeś zamiaru trolować, flamewar jest zbędny.

Ponadto obecna struktura fw jest uzasadniona tym, że rzeczywiście w "class/" znajdują się obiekt gdzie każdy poszczególny obiekt ma swoje zadanie, w tym kontroler scalający wszystko by funkcjonowało jak należy.
Turson
19.09.2014, 13:12:42
model też jest klasą to czemu trzymasz w php/ a nie class/ ? A templates to raczej sugeruje layout a nie widok
Magan
19.09.2014, 13:16:44
W php trzymam wszystko pozostałe co nie potrzebuje być obiektem a było by napisane struktualnie (głównie pliki includowane przez obiekt modelu w zależności od wyświetlanej strony, tak samo jak robi to obiekt widoku wywołujący poszczególne tpl-ki). Trzymanie się obiektowego programowania w zdecydowanej całości jest wg. mnie w negatywnym kontekście skrajnością. Jeśli się głębiej zastanowić to na upartego można również stwierdzić że metody obiektu to niekiedy formy struktualne, a nie stricte obiektowe.
Turson
19.09.2014, 13:19:56
Więc na jakiej zasadzie ładujesz model do konkretnego kontrolera, skoro nie pobierasz instancji klasy? Samo include? I co wtedy jak chcesz z pewnego kontrolera odwołać sie do innego modelu, znowu include? Polecam najpierw popracować trochę na jakimś porządniejszym fw, żebyś wyrobił sobie kilka zdań na tego, jak co powinno mniej więcej wyglądać
Magan
19.09.2014, 13:25:27
Dziękuję uprzejmie za radę aczkolwiek chcę najpierw trochę poeksperymentować. To czy mój pomysł okaże się wydajny i lekki, okaże się po czasie gdyż chcę postawić na nim m.in. swój blog i przenieść grę (w js/html5/php). Pokrótce zrobiłem to tak, że każdą klasę wywołuję poprzez kontroler, zaletą jest m.in. to, że mogę hookować wszystko co nie znajduje się na czarnej liście czyli spore możliwości modowania silnika bez ingerencji w sam silnik. Innymi słowy, ogólnie, wszystko zależy jakie są założenia projektu, taka powinna być struktura.
A, i nie samym include silnik żyje a tym, że tworzy instancje obiektów do własnej zmiennej (tablicy) i wszystko jest wywoływane przez __call().
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.