Ho un modello user
in un'applicazione a cui sto lavorando, che attualmente usa sub-types
per incapsulare properties
a seconda del tipo di utente che sei: non posso fare a meno di pensare che questo è davvero un pessimo design.
Per espandere più in dettaglio, un User
nella nostra Applicazione può essere un Istruttore o uno Studente, e di seguito viene mostrato come questo è attualmente modellato:
public class User
{
public string EMail {get; set;}
public string DisplayName {get; set;}
public Student StudentObject {get; set;}
public Instructor InstructorObject {get; set;}
public void Login()
{
//...
}
public void BookAppointment()
{
//...
}
//Other User-Level Behaviours
public class Instructor
{
public TimeSpan TypicalDayStart {get; set;}
public TimeSpan TypicalDayEnd {get; set;}
public ObservaleCollection Students {get; set;}
//No Instructor Specific Behaviour / Methods
}
public class Student
{
public string CurrentGrade {get; set;}
public DateTime NextExamDate {get; set;}
public bool ExamPassed {get; set;}
public int InstructorID {get; set;}
//No Student Specific Behaviour /Methods
}
}
Per me, questo davvero odora. Ma non riesco a pensare a un modo migliore per modellare i dati:
- Separare
Instructor
/Student
classi sembra essere la strada sbagliata, in quanto non sono in realtà entità separate, sono solo un insieme di proprietà che sono uniche per i diversi tipi di l'utente che gestisce la nostra applicazione. - Rimuovere i sottotipi e gestire tutti i dati di una classe sembra essere il modo in cui sono incline ad andare. Tuttavia questo rende alcuni
properties
ridondanti. Inoltre non è molto a prova di futuro ... Solo perché non esiste un comportamento specifico per istruttore / studente al momento non significa che non ci sarà in futuro.