Учебная группа это - ViewModel или Model

У меня есть viewmodel, в которой лежит коллекция, которая должна отображать учебные группы.

В классе самой учебной группе лежат команды, отвечающие за ее ликвидацию, показа информации и изменении информации. Команды привязаны во view к button свойству command. В классе также лежат свойства отвечающие за название группы, кол-ва студентов, сами студенты(классы) и еще какие-нибудь свойства.

Такой класс является ViewModel или Model, правильно ли сформирован класс или все таки нужно вынести свойства в которых значения в отдельную Model и получится ViewModel с командами и в ней лежит Model(группы) получаемая через сервис Моделей.

Т.е. алгоритм такой:

  1. Нажимаю создать группу
  2. Ввожу данные о группе(название, кол-во студентов и т.д.)
  3. Создаю группу и внутри уже создается model группы, с данными, которая попадает во ViewModel или это Model с командами, и этот класс представляет элемент коллекции.

Или же все это в одном классе (команды и свойства), это будет ViewModel или Model, вопрос такой так как жизненным циклом объекта управляется через View и не ясно как воспринимать такой класс в контексте MVVM, подскажите)


Миниатюра того, что нужно Миниатюра того, что нужно

Сервис:

public class DataService : IModelService
{
    public ObservableCollection<Group> GetData()
    {
        Group group = new Group();
        return group.GetData();
    }
}

Главная ViewModel:

    public class MainVM : ReactiveObject
{
    public string Title { get; set; }
    public int Count { get; set; }


    public ObservableCollection<GroupVM> Groups {get; set;}

    public ReactiveCommand<Unit,Unit> AddCommand { get; set;}

    public ReactiveCommand<GroupVM, Unit>? InfoCommand { get; set; }
    public ReactiveCommand<GroupVM, Unit>? DeleteCommand { get; set; }

    IModelService _modelService;
    public MainVM(IModelService modelService) 
    {
        _modelService = modelService;

        Groups = new ObservableCollection<GroupVM>();

        foreach(var groupModel in modelService.GetData())
        {
            Groups.Add(new GroupVM()
            {
                Title = groupModel.Title,
                Count = groupModel.Count
            });
        }

        AddCommand = ReactiveCommand.Create(() =>
        {
            Groups.Add(new GroupVM()
            {
                Title = Title,
                Count = Count
            });
        });
        InfoCommand = ReactiveCommand.Create<GroupVM>(groupVM =>
        {
            infoGroup(groupVM);
        });
        DeleteCommand = ReactiveCommand.Create<GroupVM>(groupVM =>
        {
            deleteGroup(groupVM);
        });

    }

    void deleteGroup(GroupVM group) => Groups.Remove(group);
    void infoGroup(GroupVM group) => MessageBox.Show(group.Count.ToString(), group.Title);
}

ViewModel группы:

    public class GroupVM : ReactiveObject
{
    public string Title { get; set; } = string.Empty;
    public int Count { get; set; }
}

Model группы:

    public class Group
{
    public string Title { get; set; } = string.Empty;
    public int Count { get; set; }

    public ObservableCollection<Group> GetData()
    {
        ObservableCollection<Group> groups = new ObservableCollection<Group>()
        {
            new Group(){ Title = "Группа 1", Count = 25},
            new Group(){ Title = "Группа 2", Count = 30},
            new Group(){ Title = "Группа 3", Count = 25},
            new Group(){ Title = "Группа 4", Count = 20} 
        };
        return groups;
    }
}

Ответы (0 шт):