Al momento disponiamo di un'applicazione che consente agli utenti di creare un Contract
. Un contratto può avere 1 o più Project
. Un progetto può avere 0 o più sottoprogetti (che possono avere i propri sottoprogetti e così via) e uno o più Line
. Le linee possono avere qualsiasi numero di sotto-linee (che possono avere le loro linee secondarie e così via).
Attualmente, il nostro design contiene riferimenti circolari e mi piacerebbe allontanarmene. Attualmente, sembra un po 'come questo:
public class Contract
{
public List<Project> Projects { get; set; }
}
public class Project
{
public Contract OwningContract { get; set; }
public Project ParentProject { get; set; }
public List<Project> SubProjects { get; set; }
public List<Line> Lines { get; set; }
}
public class Line
{
public Project OwningProject { get; set; }
public List ParentLine { get; set; }
public List<Line> SubLines { get; set; }
}
Usiamo il modello "M-V-VM" e usiamo questi modelli (e i loro modelli di vista associati) per compilare una grande schermata di "modifica" in cui gli utenti possono modificare i loro contratti e le proprietà su tutti gli oggetti. Dove le cose iniziano a generare confusione per me è quando aggiungiamo, ad esempio, una proprietà Cost
a Line
. Il problema sta riflettendo al più alto livello (il contratto) le modifiche apportate al livello più basso.
In cerca di alcuni pensieri su come modificare questo disegno per rimuovere i riferimenti circolari. Un pensiero che ho avuto è stato che il contratto avrebbe un Dictionary<Guid, Project>
che conterrebbe TUTTI i progetti (indipendentemente dal loro livello nella gerarchia). Il Project
avrebbe quindi una proprietà Guid chiamata "Parent" che potrebbe essere usata per cercare nel dizionario del contratto l'oggetto genitore. La stessa logica potrebbe essere applicata al livello Line
.
Grazie! Qualsiasi aiuto è apprezzato.