Смысл создания виртуальных свойств и статического метода Create () - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть несколько примеров демонстрации 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; }
}

1 Ответ

1 голос
/ 29 апреля 2019

Виртуальные свойства / коллекции позволяют изменять их использование в производных классах, например, устанавливать их в соответствии с вашими пожеланиями для тестов (вручную или какой-либо библиотекой).Они также могут потребоваться ORM (np. NHibernate) для правильного манипулирования данными и использованием базы данных.

Статические Create() методы являются частью фабричного шаблона.Подробнее об этом вы можете прочитать под этим вопросом.

...