8

Używam Zend Framework i doktryny w tej aplikacjiMVC projekt pytanie

W mojej aplikacji sieci web i mają różne poszczególne moduły, takie jak imprezy, konferencje, studia przypadków .. więc robię projekt kontrolera w tej chwili. W poniższym obrazie dokumentem regulacyjnym jest kontroler, a jego podkategorią są jego działania. Tak więc dokumenty kontrolne, filmy wideo, podcasty mają niemal taki sam rodzaj funkcjonalności. więc czy ten projekt jest odpowiedni ...? W mvc dla każdej akcji będę mieć oddzielny widok. I na typie użytkownika i może być konieczne wprowadzenie poziomów dostępu do tych modułów. więc utrzymałem oddzielny kontroler, dzięki czemu mogę łatwo kontrolować moduł dla każdego rodzaju użytkownika. Powoduje to jednak duplikowanie kodu.

enter image description here

Teraz myślę zrobić jedną klasę nadrzędną i że będę mieć wszystkie wspólne metody. na przykład. Będę miał wspólne zasoby Zasobów iw tym będę przechowywać listę, wyszukiwanie, sugerować, dodawaćUprawione itd. I to będzie rodzic dla wyżej wymienionych kontrolerów.

A więc jak będę zarządzać moim widokiem dla wszystkich tych różnych modułów, jeśli zastosuję to podejście? jeśli pójdę z tym niż mój kod będzie trochę brudny ...?

+1

Czy możesz podać przykład "bałaganu" kodu? Czy możesz dokładniej określić, o co się martwisz? –

Odpowiedz

0

Jeśli dobrze rozumiem, masz zestaw typowych zachowań wśród dokumentów regulacyjnych, filmów i podcastów.

W tym przypadku prawdopodobnie powinieneś spróbować wyodrębnić podobieństwa do klasy macierzystej, z której te trzy obszary dziedziczą.

Jako przykład mam własne środowisko MVC, w którym definiuję superklasę tnh_controller, z której dziedziczą inne moje kontrolery (np. Venue_controller, group_controller). W kontrolerze nadrzędnym definiuję metody header() i footer() oraz delete(). Mogę następnie użyć tych niezmienionych w klasach dla dzieci i zaoszczędzić sobie trochę wysiłku.

Można również wykonać niektóre typowe prace dla modeli (CRUD) w nadklasie modelu, zastępując je tylko w razie potrzeby. Większość logiki dla różnych modeli pochodzi ze zmiennych klas (nazwy tabel, nazwy kolumn itp.).

Nie martwię się zbytnio o bycie "surowym" MVC. Zamiast tego spróbuj ustalić, co pozwoli Ci zaoszczędzić czas i uporządkować kod. Wygląda na to, że jesteś na dobrej drodze, stawiając podobne zachowania na poziomie rodziców.

0

Projektowanie MVC oznacza, że ​​dla każdego widoku masz kontroler i model. Jednak modele nie muszą w ogóle być klasami, ani nie mieć innego modelu dla każdego MVC. Zazwyczaj model współdzielony jest pomiędzy niektórymi MVC, lub model może być po prostu wartością całkowitą, którą definiuje się we własnym kontrolerze. Zazwyczaj warto nawet do współdzielenia danych między nimi, to trzeba będzie tryb singleton:

http://www.galloway.me.uk/tutorials/singleton-classes/

0

można jeszcze oddzielny kontroler zawierać sugerują, działania addFavorite bez konieczności dokonywania jej klasy nadrzędnej dla wszystkich kontrolerów. Zasadniczo związane z nimi elementy interfejsu użytkownika można renderować jako widoki częściowe i wywoływać akcje w odpowiednim kontrolerze. W ten sposób możesz pozbyć się problemu z widokami.

1

Proponuję, aby wszystkie kontrolery miały ładne adresy URL i przejrzystą strukturę w modułach, jednak niech kontrolery będą cienkie. Umieść logikę domeny w usługach lub jednostkach, dlatego nie jest wymagana (lub tylko mniejsza) duplikacja kodu.

Więcej w:

Od DDD:

kontrolery należą do warstwy aplikacji/logika domeny należy do warstwy domeny