Sfondo
Sto sviluppando un progetto WPF.
Questa è la struttura di base:
- Interfaccia utente (progetto WPF);
- Interfacce (libreria di classi, contiene tutte le interfacce e le entità utilizzate dall'applicazione;
- Moduli (ogni modulo contiene la logica di un argomento specifico, ad esempio Gestione file, e può eventualmente contenere controlli utente Wpf).
Nei controlli WPF, per facilitare le operazioni di associazione ho creato una classe BaseViewModel che contiene un metodo Raise che automatizza il meccanismo di binding (per ulteriori dettagli, ho usato una tecnica simile a quella descritta in questo article ).
Il problema
Comprendi quale è il modo migliore per separare il modulo di presentazione dal modulo aziendale nelle classi di entità.
Il caso
Nel progetto Interfacce ho, ad esempio, la classe User
public class User
{
public virtual string Name { get; set; }
// Other properties
}
In uno dei moduli ho bisogno di usare la classe User
e di associare le sue proprietà ai controlli dell'interfaccia utente. Per farlo, devo utilizzare un'implementazione personalizzata delle parole chiave get
e set
.
Al primo punto, ho pensato di creare una classe nel modulo chiamata, ad esempio, ClientUser e sovrascrivere le proprietà di cui ho bisogno:
public class ClientUser : User
{
private string name;
public override string Name { get { return name; } set { Raise(out name, value); } }
// Other properties
}
Il problema è il metodo Raise, che è dichiarato nella classe BaseViewModel
, ma a causa del vincolo di ereditarietà C #, non posso ereditare da entrambe le classi.
Qual è il modo giusto per implementare questa architettura?