In einigen MVC-Projekten, an denen ich gearbeitet habe, ist es offensichtlich geworden, dass es einige problematische Controller gibt, die organisch zu Gott-Klassen gewachsen sind - demi-gods jeweils in ihrem eigenen Bereich, wenn du so willst.Gott-Controller - Wie man sie verhindert?
Diese Frage könnte eher eine Frage sein, "was wohin geht", aber ich denke, es ist eine wichtige Frage in Bezug auf SRP (Prinzip der einfachen Verantwortung), DRY (Do not Repeat Yourself) und die Dinge kurz halten, " agil "- und ich bin nicht genug erfahren (mit diesem Muster und im allgemeinen Design), um darüber informiert zu sein.
In einem Projekt haben wir einen NutritionController. Im Laufe der Zeit ist es gewachsen, diese Aktionen enthalten (viele mit ihren jeweiligen, GET, POST und DELETE-Methoden):
Index (home controller) ViewFoodItem AddFoodItem EditFoodItem DeleteFoodItem ViewNutritionSummary SearchFoodItem AddToFavorites RemoveFromFavorites ViewFavorites
Dann haben wir eine ExerciseController, die viele ähnliche Aktionen, wie zum Beispiel die umfassen wird Suchvorgänge und Favoritenaktionen. Sollten diese in ihren eigenen Controller umgestaltet werden, so dass es so etwas ist?
SearchController {
SearchExercise
SearchNutrition
//... etc
}
FavoritesController {
ViewNutritionFavorites
AddToNutritionFavorites
AddToExerciseFavorites
EditNutritionFavorites
EditExerciseFavorites
//... etc
}
Es scheint nur zu mir, dass, wenn man sie bricht in separate Controller, Sie gehen eine unglaublich große Abhängigkeit zu einem gewissen Grad wachsen mit den Informationen umgehen, die Sie benötigen. ODER Sie werden eine komplett generische Anwendung haben, die sehr schwierig zu handhaben ist, da Sie durch so viele Ringe springen müssen, um den gewünschten Effekt zu erhalten (entweder auf M-, V- oder C-Level).
Ich denke über den falschen Weg nach? Zum Beispiel, sollte ich ein generisches Favoriten-Objekt haben und dann den Controller entscheiden lassen, in welche Ansicht er geworfen werden soll?
* Sorry für die Akronyme buchstabieren - ich bin so in Fall tun sonst jemand über diese Frage kommt und ahnungslos, was diese Dinge sind
EDIT: die Logik I Alle auszuführen ist ziemlich viel in den Service-Schichten behandelt. Zum Beispiel sendet der Controller das "neue" FoodItem an den Service. Wenn es bereits vorhanden ist oder ein Fehler vorliegt, wird der Dienst den Controller erneut zur Verfügung stellen.
Also würde ich die gleichen Dinge für die Übungen replizieren oder sie diesen Controllern hinzufügen? I.E. Würde der SearchController die SearchExerciseItem-Methoden behandeln, oder wäre das ein anderer Controller wie SearchExerciseController? – MunkiPhD
Wenn dies so eingerichtet ist, ist die Suche eine Aktion auf dem Controller, nicht ein Controller selbst zu diesem Zeitpunkt. Wäre das Suchen etwas Allgemeines, könnte es dann sein eigener Controller sein. Ich habe meine Antwort geändert, um dies zu reflektieren. – Soviut
MVC arbeitet auf sehr natürliche Weise mit REST: Alle Ihre Controller "steuern" eine einzige Art von Ressource und wissen, wie verschiedene Aktionen auf dieser Ressource ausgeführt werden (dh auf verschiedene an diese Ressource übergebene Nachrichten reagieren) zu Domänenmodell-Entitätstypen meist eins zu eins (das ist der Punkt, an dem ein Domänenmodell vorhanden ist). – yfeldblum