Qual è la raccomandazione riguardante il riutilizzo di DTO da bambino in un altro DTO?
Utilizzo API Web ASP.NET (C #) e consumo i risultati con Angular 1.x (non sono sicuro se ciò sia davvero importante).
Ho i seguenti DTO
class SiteDto {
public int SiteId {get;set;}
public string Name {get; set;}
public DateTime CreatedDate {get;set;}
...
}
class SiteEventDto {
// pk
public int SiteEventId {get; set; }
// fk
public int SiteId {get; set;}
public DateTime EventStartDate {get; set;}
public DateTime EventEndDate {get; set;}
...
}
Voglio restituire un elenco di SiteEvents con un nome di sito (ad esempio). C'è una raccomandazione per il collegamento tra SiteEvent e il sito per ottenere queste informazioni sui genitori? Ad esempio, vedo le seguenti possibilità:
-
Riutilizza DTO esistente: utilizza il DTO del sito esistente come proprietà all'interno del DTO SiteEvent (ad esempio
public SiteDto ParentSite { get; set; }
)- Pro:
- Riutilizzo del codice
- Scalabile
- Contro:
- Potenzialmente un sacco di extra bloat (per le chiamate basate sul web / json in particolare) a causa di proprietà non necessarie e forse di gerarchie parentali aggiuntive
- Pro:
-
Crea nuovo DTO genitore: crea un DTO figlio specifico per questa attività (ad esempio
class SiteEventSiteDto {
...) e fai riferimento a ciò tramite una proprietà figlio su SiteEventDto- Pro:
- Riduci ulteriore ingombro dai campi inutilizzati
- Contro:
- Riutilizzo del codice minimo
- Pro:
-
Struttura della classe Flatten: Appiattisci la struttura della classe per includere semplicemente una proprietà "SiteName" in SiteEventDto (ad esempio
public string SiteName { get; set; }
)- Pro:
- Riduci ulteriore ingombro (anche di più)
- Contro:
- Riutilizzo del codice minimo
- Pro:
Probabilmente ha senso esaminare ciascun caso individualmente e valutare le seguenti domande:
- Prevedo la necessità di ulteriori proprietà al di fuori dell'oggetto principale?
- Quanto è difficile aggiungere una nuova proprietà in una struttura piatta?
- Quanta larghezza di banda costa davvero l'utente?
Credo che le mie domande alla comunità siano:
- È prassi comune riutilizzare un DTO per più di un controller (scenario n. 1, sopra) o è considerato una cattiva pratica per qualche motivo? Oppure, ha più senso creare un nuovo DTO figlio o utilizzare una struttura piatta quando possibile?
- E infine, le mie ramblings sopra sembrano un buon approccio a questo problema?