Sto scrivendo un'applicazione MVC4 per tenere traccia dei documenti che abbiamo in archivio per i nostri clienti. Sto utilizzando il codice per primo e ho creato modelli per i miei oggetti (Azienda, Documento, ecc.). Ora mi trovo di fronte all'argomento della scadenza dei documenti.
La logica aziendale impone che determinati documenti scadano per un determinato numero di giorni dopo la data del documento. Ad esempio, il documento A potrebbe scadere dopo 180 giorni, il documento 2 in 365 giorni, ecc ... Ho una classe per i miei documenti come mostrato di seguito (semplificata per questo esempio).
Qual è il modo migliore per me di creare una ricerca per i valori di scadenza? Voglio specificare i documenti di tipo DocumentA scadono in 30 giorni, digita DocumentB scade tra 75 giorni, ecc ... Posso pensare ad alcuni modi per farlo:
- Tabella di ricerca nel database che posso interrogare
- Nuova proprietà nella mia classe (DaysValidFor) che ha un getter personalizzato che restituisce valori diversi in base a DocumentType
- Un metodo che accetta il tipo di documento e restituisce il numero di giorni
e sono sicuro che ci sono altri modi a cui non sto nemmeno pensando. La mia preoccupazione principale è a) non violare alcuna best practice e b) manutenibilità. Ci sono dei pro / contro che devo sapere per le opzioni di cui sopra, o si tratta di un caso di "sceglierne solo uno ed eseguirlo"?
Un ultimo pensiero, in questo momento il numero di giorni è un valore che non ha bisogno di essere archiviato ovunque su una base per documento - tuttavia, è possibile che la logica aziendale modifichi questo (cioè, i DocumentA sono 30 giorni scadenza per impostazione predefinita, ma questo DocumentoA associato alla Società XYZ sarà di 60 giorni perché ci piacciono). In tal caso, una proprietà nella classe Document è il modo migliore per andare, visto che ho bisogno di aggiungere quel campo al DB?
namespace Models
{
// Types of documents to track
public enum DocumentType
{
DocumentA,
DocumentB,
DocumentC // etc...
}
// Document model
public class Document
{
public int DocumentID { get; set; }
// Foreign key to companies
public int CompanyID { get; set; }
public DocumentType DocumentType { get; set; }
// Helper to translate enum's value to an integer for DB storage
[Column("DocumentType")]
public int DocumentTypeInt
{
get { return (int)this.DocumentType; }
set { this.DocumentType = (DocumentType)value; }
}
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM-dd-yyyy}", ApplyFormatInEditMode = true)]
public DateTime DocumentDate { get; set; }
// Navigation properties
public virtual Company Company { get; set; }
}
}