Istnieją dwie główne struktury baz kodu, które widziałem, jeśli chodzi o frameworki MVC. Problem polega na tym, że oba wydają się mieć błąd organizacyjny, który im towarzyszy.
Standardowy MVC
/controller
/model
/view
Problem: Brak separacji powiązanych elementów (forum, blog, użytkownik itp.)
Modułowy MVC
/blog
/controller
/model
/view
/user
/controller
/model
/view
/forum
/controller
/model
/view
Wybór systemu opartego na modułach pozostawia problem.
- Długie nazwy (Forum_Model_Forum = forum / model / forum.php) (jak Zend)
- System plików wyszukuje za pomocą,
is_file()
aby znaleźć, który folder ma model forum? (Jak Kohana)
Czy mają jakieś inne struktury MVC, które działają dobrze podczas próby oddzielenia różnych modułów? Czy brakuje mi tych struktur?
web-applications
mvc
web-framework
file-structure
Xeoncross
źródło
źródło
Odpowiedzi:
Próbować:
Twoje modele są sercem Twojej aplikacji. Powinieneś zaprojektować i zakodować je jako samodzielny pakiet. Kontrolery są tylko klientami twojego modelu, które przekształcają aktywność użytkownika w działania dla twojego modelu. Widok jest tylko jednym szczególnym sposobem wyświetlania danych z twojego modelu. Jeśli Twoja aplikacja rośnie, możesz jeszcze bardziej oddzielić klientów od modelu:
To powinno sprawić, że oczywistym będzie, że możesz mieć wielu klientów, którzy w ten czy inny sposób wchodzą w interakcje z jednym modelem.
źródło
;)
Znalazłem najlepszą strukturę dla MVC / HMVC Framework. Do głównego musisz użyć kontrolerów bazowych / modeli / widoków ... ale dla poszczególnych elementów modułów kursu ...
Więc w mojej strukturze frameworka MVC / HMVC wygląda to tak:
Również w razie potrzeby dodam biblioteki modułów, i18n lub pomocników.
Konwencja nazewnictwa jest łatwa, do kontrolerów i modeli dodam przyrostek _Controller i _Model. Do kontrolerów i modeli z modułów dodaję także przedrostek z nazwą modułu, np. Profil kontrolera w module Użytkownik zostanie nazwany jako User_Profile_Controller.
Więc bardzo łatwo i szybko znajdziesz to, czego potrzebujesz.
źródło
Systematyczne nazywanie klas pomaga uniknąć konfliktów nazw między komponentami. Długie nazewnictwo klas raczej nie nakłada surowych kar za wydajność. Uważam, że ten schemat nazewnictwa jest raczej pomocny podczas kodowania, ponieważ łatwo jest zobaczyć, skąd pochodzi.
To bardzo zależy od tego, jak system został zaimplementowany, ale struktura systemu plików zwykle jest zgodna z konwencją, która pozwala na natychmiastowy dostęp do właściwego komponentu bez rozległych wyszukiwań systemu plików.
Oto przykład, załóżmy, że należy użyć komponentu forum:
Informacje:
Nazwa kontrolera: indeks
$ ścieżka_kontrolera = BASEDIR. „moduł /”. $ nazwa_komponentu. '/kontroler/' . $ nazwa_kontrolera. „.php”;
Należy również zauważyć, że podczas uruchamiania typowej witryny internetowej istnieją dosłownie setki zapytań dotyczących systemu plików, więc dodanie niektórych nie zaszkodzi.
źródło
Pracuję ze stronami internetowymi, które zaczęły się od pierwszego „Standardowego MVC”, ale ostatecznie stały się „Modularnym MVC”.
Jeśli prowadzisz małą stronę internetową i nie masz dużego doświadczenia, możesz zacząć od „Standardowego MVC”. Jeśli już wiesz, że strona internetowa będzie bardzo złożona i duża, musisz przyzwyczaić się do „Modular MVC”, na początku będzie to trochę trudne, ale ostatecznie przyzwyczaisz się do to.
źródło
Właściwie sam pracuję nad frameworkiem i używam kombinacji zarówno struktury katalogów opartej na modułach, jak i swobodnych. Moja domyślna struktura kodu witryny przy użyciu frameworka to:
Możesz także mieć folder modułu, który nie odnosi się do kontrolera, i domyślnie istnieje jeden moduł wywoływania Core, który służy do przechowywania szablonów w całej witrynie, takich jak nagłówek i stopka. To dla mnie daje to, co najlepsze z obu światów. Możesz łatwo dowiedzieć się, gdzie jest kontroler, ponieważ jest jeden kontroler na folder, ale w przypadku klas takich jak modele nie musisz szukać, gdzie znajdują się pliki, ponieważ znajdują się w jednym katalogu (dzięki czemu nazwy modeli są czystsze) .
Sposób ładowania plików jest nieco inny, ponieważ pozwalam użytkownikowi konfigurować różne katalogi, w których mogą znajdować się klasy, więc wstępnie analizuję katalogi i przechowuję wszystkie lokalizacje plików klas w pliku json, a następnie używam tego do szybkiego wyszukiwania wszystkie inne prośby (chociaż szukam sposobów, aby to poprawić).
źródło
Odpowiedź na to pytanie podyktowała propozycja PSR-0 którą wszystkie duże systemy zaczynają dostosowywać lub już przyjęły.
Struktura jest:
Oznacza to, że nie można nic zrobić, aby naprawić długie nazwy plików:
Oznacza to również, że musisz używać niemych plików wielkimi i małymi literami zamiast wszystkich małych liter (jeśli nie, biblioteki innych firm nie będą działać).
źródło
Rozwiązanie Mathiases ma sens. Użycie jego struktury folderów nie zapobiega zawartości, którą można podłączyć, na przykład dodanie niezależnej / galerii / mogłoby wyglądać następująco
Teraz mamy wspólny „model” i niezależne, jeśli to konieczne
źródło