In alcuni progetti MVC a cui ho lavorato, è diventato evidente che ci sono alcuni controllori problematici che sono cresciuti organicamente nelle classi di Dio - semi-divinità ciascuno nel proprio dominio, se vuoi.Controllori di Dio - Come prevenirli?
Questa domanda potrebbe essere più una questione "che cosa va dove", ma penso che sia una questione importante per quanto riguarda SRP (Principio della singola responsabilità), DRY (Non ripeterti) e mantenere le cose concise, " agile "- e non sono abbastanza esperto (con questo modello e in generale design) per essere informato su questo.
In un progetto, abbiamo un NutritionController. Nel corso del tempo è cresciuto fino ad includere queste azioni (molti con i loro rispettivi, GET, POST, e DELETE metodi):
Index (home controller) ViewFoodItem AddFoodItem EditFoodItem DeleteFoodItem ViewNutritionSummary SearchFoodItem AddToFavorites RemoveFromFavorites ViewFavorites
Poi abbiamo un ExerciseController, che includerà molte azioni simili, come la ricerche e azioni preferite. Dovrebbero essere refactored nel loro proprio controllore in modo che sia qualcosa come così?
SearchController {
SearchExercise
SearchNutrition
//... etc
}
FavoritesController {
ViewNutritionFavorites
AddToNutritionFavorites
AddToExerciseFavorites
EditNutritionFavorites
EditExerciseFavorites
//... etc
}
sembra solo a me che se si rompe fuori in controller separati, si sta andando a crescere un incredibilmente grande dipendenza a un certo livello a che fare con le informazioni che avrete bisogno. OPPURE avrai un'applicazione di gestione completamente generica che sarà molto difficile da gestire dato che dovrai passare attraverso così tanti cerchi per ottenere l'effetto desiderato (a livello M, V o C).
Sto pensando a questo nel modo sbagliato? Ad esempio, dovrei avere un oggetto Preferiti generico e quindi lasciare che il controller decida la vista a cui lanciarlo?
* Ci scusiamo per enunciando gli acronimi - che sto facendo così nel caso in cui nessun altro si imbatte in questa domanda ed è all'oscuro di ciò che quelle cose sono
EDIT: Tutta la logica mi esibisco è praticamente gestito nei livelli di servizio. Ad esempio, il controller invierà il "nuovo" FoodItem al servizio. Se esiste già, o c'è un errore, il servizio lo rispedirà al controller.
Quindi, quindi, dovrei replicare le stesse cose per gli Esercizi o aggiungerli a quei controller? OSSIA il SearchController gestirà i metodi SearchExerciseItem o sarebbe un altro controller come SearchExerciseController? – MunkiPhD
Se è così che l'hai impostato, la ricerca è un'azione sul controller, non un controller stesso a questo punto. Se la ricerca fosse qualcosa di generale, allora potrebbe essere il suo controller. Ho modificato la mia risposta per riflettere questo. – Soviut
MVC funziona con REST in modo molto naturale: tutti i controller "controllano" un singolo tipo di risorsa e sanno come eseguire varie azioni su quella risorsa (ovvero rispondono ai vari messaggi passati a quella risorsa), con la mappatura dei tipi di risorse REST a tipi di entità modello di dominio per lo più one-to-one (che è il punto di avere un modello di dominio). – yfeldblum