Scenario: Sto scrivendo un programma che gestisce la generazione di report.Devo usare modelli separati per dominio ed EF?
Ho il report memorizzato in un database, mappato su un modello EF. Esistono alcuni campi non di database (ad esempio alcuni campi vengono calcolati automaticamente in base agli altri campi presenti nel db). Avrebbe senso avere una classe che si mappasse esclusivamente al DB, e un'altra classe che prendesse quell'informazione e in aggiunta avesse gli altri campi di calcolo?
cioè una classe di esempio per interagire con il database codefirst sarebbe
public class Report{
public int CategoryOneSeverity {get; set;}
public int CategoryTwoSeverity {get;set;}
public string Title {get;set;}
}
Avrebbe senso per fare un'altra classe, come:
public class ReportModel{
public int CategoryOneSeverity;
public int CategoryTwoSeverity;
public string Title;
public int RiskRating{
get{ return CategoryOneSeverity + CategoryTwoSeverity; }
}
}
O dovrebbe la proprietà RiskRating essere in EF modello.
Sono d'accordo con la risposta accettata che dovreste avere classi separate: una per modellare l'archivio dati e una per modellare il vostro dominio aziendale. Tuttavia, la tua seconda classe viola diversi assiomi di buon design, il più ovvio dei quali è che i campi non dovrebbero essere esposti pubblicamente. –
Non mi piace davvero inserire membri privati e quindi utilizzare una proprietà per ottenerlo. un campo non ha più senso, specialmente per le aree che dovrebbero cambiare? Ad esempio, l'utente può modificare il titolo in qualsiasi momento. – appsecguy
No, in realtà, non ha senso e, come ho detto, vola di fronte al buon design.La proprietà consente di aggiungere la logica di convalida, modificare la rappresentazione del campo di supporto con una conversione e, in ultima analisi, consentire all'utente di mantenere una superficie di consumo stabile. Che il nostro buon amico Jon Skeet lo dica meglio: http://www.csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx –