Se ho dieci oggetti, dovrebbero esserci dieci controllori per un'API Web?

4

È buona norma avere un controller per ogni oggetto della tua API? So che questa è una domanda breve, ma è davvero una domanda fondamentale che non conosco. Dì che ho una scuola o un CRM. Questo è un sacco di controller. Non conosco un altro modo per farlo, ma sembra un problema di DRY.

Sto usando ASPNET Core se questo è importante.

EDIT: Per oggetto intendevo le classi reali nel mio progetto. Ma le risposte hanno pulito tutto. Ci stavo pensando come una sola corrispondenza one-to-one.

    
posta johnny 02.02.2017 - 15:53
fonte

2 risposte

5

Definisci "oggetto"

Hai un controller per ciascuna risorsa . Dove una risorsa è una cosa fornita dalla tua API ( user , customer , student , sports-team , ecc.)

Le risorse non necessariamente mappano da uno a uno a oggetti dominio . A volte una risorsa è composta da diversi oggetti di dominio e talvolta diverse risorse fanno riferimento agli stessi oggetti di dominio.

Un controller può restituire diverse rappresentazioni della stessa risorsa, a seconda di come viene chiamato. Generalmente sono solo due.

Un riepilogo della risorsa quando si restituisce un elenco:

GET /students

[
    { id: 1, name: "john smith" },
    { id: 2, name: "jane smythe" }
]

E una rappresentazione dettagliata quando ottieni un oggetto specifico

GET /students/1

{
    id: 1,
    name: "john smith",
    age: 27,
    location: "Venezuela"
}

Se una risorsa ha una strong dipendenza da una risorsa genitore (ad esempio, una stanza non può esistere senza la costruzione in cui si trova), avrei ancora un controllore della camera e gestirò la dipendenza tramite le proprietà e la logica aziendale richieste. (vale a dire che room deve specificare building_id )

Mettere la logica della stanza nel controllore dell'edificio significa dare troppe responsabilità.

    
risposta data 02.02.2017 - 17:48
fonte
1

Direi di solito perché se ne hai di meno, darai più responsabilità allo stesso controller, il che non è buono.

Vedo un caso in cui non è possibile avere bisogno di un controller: è quando un oggetto A ha una relazione strong con un altro oggetto padre B e non ha alcuna operazione indipendente. Quindi quell'oggetto A sarà gestito dall'oggetto B dell'associazione. È possibile che nel livello inferiore (servizio, database) deleghi l'operazione di A a una classe specifica per lui, ma questo non sarà visibile dalla vista dell'API.

    
risposta data 02.02.2017 - 16:17
fonte

Leggi altre domande sui tag