Domanda

Controllers possono diventare grandi ed ingombranti quando contengono un gran numero di azioni. È questo un problema significativo in uso nel mondo reale, e in caso affermativo quali sono le strategie per mitigare (o è è sufficiente per tenere semplicemente l'azione-conto alla rovescia per controller)?

Fuori della parte superiore della mia testa posso prevedere il controllore scarico la logica per implementazioni azione in altri tipi, raggruppati secondo alcuni euristica significativa.

È stato utile?

Soluzione

Nella mia esperienza, questo accade soprattutto quando non applico il coltello "resto" abbastanza aggressivo. A volte la metafora non è coerente con il nostro modo di pensare a un problema; per esempio, è facile pensare che "login" è un'azione su "account", ma se si applica il coltello REST, ti rendi conto che la registrazione in è davvero "Avvio di una nuova sessione" e si inverte l'idea mediante l'applicazione di una "nuova "(o creare) azione su un SessionController. Allora avete un piccolo controllore responsabile della creazione e distruzione di sessioni (login e logout).

Sono sicuro che alcune persone non saranno appassionato di confondere le acque REST con il concetto disordinato di autenticazione, quindi diamo un'occhiata a un esempio più evidente. Posso avere un'entità BlogPost, e può avere un po 'di commenti. Invece di avere un addComment azione sul BlogPostController, ho la solita creare / modificare / cancellare metodi su BlogPost, e un altro CommentController regolatore il cui nuovo / creare azioni aspetto una BlogPostId, e implementa creare / modificare / cancellare i metodi.

Ho eseguito in alcune situazioni in cui avevo bisogno di un'azione non-REST-like, come "importare un elenco di X da un file CSV", ognuno dei quali appartiene ad una Y; la "lista" non è davvero importante come un concetto di dominio, come sto davvero solo cercando di aggiungere ad una collezione esistente di Xes. In quel caso, ho preso ciò che percepisco essere un approccio leggermente brutta di aggiungere un'azione "di importazione" al mio XController. Questo codice è il codice disordinata in nessuno dei miei controllori, e sarei propenso a fattore fuori in qualcosa con la responsabilità più contenuta (una classe XImporter, forse), ma per ora "opere". Sono sicuro che qualcuno più intelligente di me avrebbe una soluzione migliore.

Quindi il mio ragionamento è questo: se si dispone di un sacco di azioni non-Resty, c'è una specie di odore di codice; forse non sta modellando quello che stai controllando in modo corretto. Ma se avete dire, 1-3 azioni unRESTy e tentativi di ripensare il problema non vi condurrà nella giusta direzione, forse non vale la pena preoccuparsi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top