Poiché questa domanda sembra essere piuttosto soggettiva, la sto postando qui.
Diciamo che stai scrivendo la tua versione di Stackoverflow usando ASP.NET MVC, quindi ci sono classi come Question
, Answer
, User
, ecc. Dato che sei pigro, hai deciso di usare l'entità struttura. Quindi, tutte le classi menzionate sopra hanno proprietà di navigazione: Question
conosce il suo Answer
s, Answer
conosce User
chi lo ha pubblicato, ecc.
Hai letto molti libri di Martin Fowler, quindi sicuramente avrai un livello di servizio per implementare tutta la logica aziendale lì. Utilizzerai ASP.NET MVC solo per l'interfaccia utente e la funzionalità relativa alla logica dell'applicazione.
Ci sono 2 domande:
- Esponi direttamente oggetti di
Question
,Answer
e altri ai controller? - Farai lo stesso per le viste?
Fondamentalmente non fornirò una API REST alla mia applicazione, né sono troppo prudente per avere solo paure come "hey, MY VIEW è a conoscenza di cosa sia Question
, non so se è cattivo o no, semplicemente non mi piace! ".
Sono particolarmente curioso del caso in cui la classe Question
ha un campo come TimePosted
e vincoli la tua vista PostNewQuestion
a quella classe. So che nel caso in cui non leghi quel campo a nessun controllo sulla pagina, non verrà pubblicato, quindi avrò il campo impostato su null
quando ho ottenuto l'oggetto sul mio controller. È considerato buono o è una cattiva idea? 2 approcci opposti che sto pensando sono "usare DTO / ViewModels ovunque" e "wtf, meno lezioni è sempre meglio!"
Quale pensi che sia un approccio giusto ? (So che non c'è una risposta diretta, quindi la domanda in effetti è "cosa dovremmo considerare per decidere se utilizzare DTO / ViewModels / Qualcos'altro è buono per l'architettura della sua app?")
Si noti inoltre che stiamo prendendo in considerazione un clone di StackOverflow molto semplificato, quindi:
- È un progetto solo web (non esponiamo l'API REST o qualsiasi altra cosa)
- Ci sono utenti, domande, risposte, tag e funzionalità di ricerca (nessuna logica aziendale in sospeso)
- Ci sono circa 100 utenti attivi al giorno (nessun requisito di rendimento speciale)
- Il codice dovrebbe essere leggibile e non ci dovrebbero essere sorprese o luoghi di particolare interesse nel caso in cui un nuovo membro si unisca al team di sviluppo.
Potresti anche esprimere la tua opinione nel caso in cui uno dei primi 3 punti venga modificato: "il cliente ora vuole che il nostro servizio consenta 10000 utenti simultanei" o "ora dobbiamo consentire a ogni singolo utente di pubblicare una volta ogni 15 minuti" , ecc.
Grazie!