Chciałem tylko porady dotyczące sposobu robienia rzeczy w MVC. Używam Codeigniter i zastanawiałem się, czy lepiej mieć jeden kontroler na stronę dla witryny, czy mieć jeden kontroler dla wszystkich stron?
Załóżmy, że mam prostą stronę internetową, na której możesz odwiedzić stronę główną, zalogować się, założyć konto i skontaktować się z administratorem.
Czy lepiej byłoby mieć te kontrolery: frontend (indeks), login, konto, kontakt LUB posiadanie jednego kontrolera o nazwie frontend lub cokolwiek innego z akcjami takimi jak logowanie, createAccount, kontakt?
Kiedy wiesz, czy lepiej jest użyć jednego kontrolera w sytuacji?
Odpowiedzi:
Lepiej mieć kontroler na jednostkę logiczną, na przykład AccountController (logowanie, rejestracja), PagesController (strona główna, kontakt), Backend -> PagesController (tworzenie, edycja, usuwanie), UsersController (tworzenie, edycja, usuwanie) i tak dalej.
źródło
@ Rushino Masz tutaj dwie „aplikacje” - front-end (dla czytelników) i backend (dla administratorów). Dla każdej grupy funkcji masz kontroler.
Logowanie to taka grupa, która obejmuje generowanie formularza HTML (pola, wywoływanie widoku) oraz obsługę formularza (sprawdzanie poprawności, połączenie z modelem). Tak więc „login” to kontroler z dwiema czynnościami - generateForm i handleForm.
Strony są podzielone między aplikację frontonu - która po prostu pokazuje strony - i aplikację backendu, która umożliwia edycję, usuwanie, tworzenie i ewentualnie wyświetlanie ich w inny sposób. Strona główna to „tylko kolejna strona” w interfejsie, więc mieści się w kontrolerze stron. Na zapleczu jego logika może być na tyle inna, że uzasadnia to całkowicie inny kontroler.
Dla użytkowników - jeśli użytkownicy mogą się zarejestrować, będą potrzebować kontrolera frontendowego, ale jeśli nie, wszystko, co dotyczy użytkowników, znajduje się w backendie.
Zauważ, że każda z funkcji zaplecza może wymagać zarówno generatora, jak i modułu obsługi. Te rzeczy można jednak podzielić na pliki konfiguracyjne za pomocą wtyczki, która jest generatorem generycznych formularzy.
Podsumowując, wygląda to tak:
źródło
Myślę, że powinieneś używać Kontrolera dla każdej jednostki biznesowej, takiej jak OrdersController do wszystkich operacji związanych z zamówieniami i tym podobnych. Zdaję sobie sprawę, że w tym przypadku kontrolery są OGROMNE, ale nadal możemy używać klas pomocniczych do delegowania takich rzeczy, jak inicjalizacja modelu i częściowe klasy do rozłożenia akcji w osobnych plikach.
Na przykład mogę mieć
Create.cs and OrdersController
pliki OrdersController List.cs dla klasy OrdersController każdy z odpowiednim zestawem akcji. Sprawia, że rzeczy są znacznie czystsze i nadal utrzymuje scentralizowane operacje zamówień w jednej klasie kontrolerów.Tylko moje 2 centy.
źródło
Myślę, że możesz przyjąć inne podejście:
Jeden główny kontroler jako drzwi wejściowe, który dostarcza zapytanie do określonych kontrolerów. W ten sposób możesz użyć tego kontrolera frontowego, aby sprawdzić typowe rzeczy, takie jak uwierzytelnianie użytkownika, Google Analytics i wszelkie inne ogólne rzeczy, które chcesz zrobić, i utrzymać czystość struktury MVC.
To nie jest mój pomysł, ale Symfony Framework działa w ten sposób, więc mogę powiedzieć, że z mojego doświadczenia jest to naprawdę fajny i elegancki sposób na implementację frontendu.
źródło