我有一些DevExpress演示示例。有两个模型和一个ViewModel。 SchedulerControl
使用类。
您能解释一下为什么在模型类中使用虚拟属性和静态Create()
方法,以及为什么在ViewModel集合中使用虚拟属性吗?
有ViewModel:
public class MainViewModel
{
public virtual ObservableCollection<Schedule> Schedules { get; set; }
public virtual ObservableCollection<Program> Programs { get; set; }
protected MainViewModel()
{
CreateSchedules();
CreatePrograms();
}
private void CreateSchedules()
{
Schedules = new ObservableCollection<Schedule>();
Schedules.Add(Schedule.Create(Id: 1, Name: "Schedule 1"));
Schedules.Add(Schedule.Create(Id: 2, Name: "Schedule 2"));
Schedules.Add(Schedule.Create(Id: 3, Name: "Schedule 3"));
}
private void CreatePrograms()
{
Programs = new ObservableCollection<Program>();
Programs.Add(Program.Create(
startTime: DateTime.Now.Date.AddHours(10), endTime: DateTime.Now.Date.AddHours(11),
scheduleId: 1, name: "Program 1"));
}
}
Schedule.cs
public class Schedule
{
public static Schedule Create()
{
return ViewModelSource.Create(() => new Schedule());
}
public static Schedule Create(int Id, string Name)
{
Schedule schedule = Create();
schedule.Id = Id;
schedule.Name = Name;
return schedule;
}
protected Schedule() { }
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
Program.cs:
public class Program
{
public static Program Create()
{
return ViewModelSource.Create(() => new Program());
}
internal static Program Create(DateTime startTime, DateTime endTime,
int scheduleId, string name)
{
Program program = Create();
program.StartTime = startTime;
program.EndTime = endTime;
program.ScheduleId = scheduleId;
return apt;
}
protected Program() { }
public virtual int Id { get; set; }
public virtual bool AllDay { get; set; }
public virtual DateTime StartTime { get; set; }
public virtual DateTime EndTime { get; set; }
public virtual int? ScheduleId { get; set; }
}
答案 0 :(得分:1)
虚拟属性/集合允许修改其在派生类中的用法,例如根据您的测试意愿来设置它们(手动或通过某些库)。 ORM(np。nHibernate)也可能需要它们,以便正确处理数据和数据库使用情况。
静态Create()
方法是工厂模式的一部分。您可以在this问题下阅读更多有关它的内容。