Соглашения об именах для MVVM? - PullRequest
1 голос
/ 29 июня 2009

Я немного борюсь с именами классов для моего приложения MVVM.

У меня есть TrainingCourse, который называется TrainingCourseViewModel, но у меня их может быть много, поэтому я создал TrainingCourseViewManager, чтобы хранить список курсов и разрешать их добавление / удаление. У меня также есть EmployeeViewController, в котором есть ссылка на другие модели представлений, а также TrainingCourseViewManager.

EmployeeViewController, по сути, оборачивает все другие модели представлений и менеджеров представлений, а когда его экземпляр создается, получает сотрудника и, в свою очередь, создает экземпляры каждой из моделей представлений и менеджеров представлений.

Вопрос в том ... Какие соглашения об именах используют люди?

Должен ли мой TrainingCourseViewManager называться TrainingCoursesViewModel и должен ли мой EmployeeViewManager называться EmployeeViewModel?

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 июня 2009

Возможна путаница в роли модели представления.

Классы в вашем примере (и в ответе Ориона на этот счет) больше похожи на реальную модель данных. Например, для модели представления не имеет смысла «хранить список курсов и разрешать их добавление / удаление» - вот что должна делать модель данных. Операции добавления и удаления в модели представления не будут работать с самой коллекцией - вместо этого они получат доступ и изменят базовую модель данных.

Сохраняют ли свойства класса TrainingCourseViewModel фактические значения данных или оборачивают свойства некоторого класса TrainingCourseDataModel (с дополнительной обработкой)? Или, если вам нужно сериализовать данные, вы бы сериализовали объекты TrainingCourseViewModel? Если значение true равно true, вы привязываетесь непосредственно к модели данных, и в именах не должно быть суффикса 'ViewModel'.


В отношении соглашений об именах, если имена становятся слишком сложными, могут помочь пространства имен. Например:

namespace TrainingCourseView.ViewModel
{ 
class TrainingCourse {} 
class Manager {}
class Controller {}
}
...
Data.TrainingCourse course;
new ViewModel.TrainingCourse(course);
1 голос
/ 29 июня 2009

Должен ли мой TrainingCourseViewManager называться TrainingCoursesViewModel и должен ли мой EmployeeViewManager называться EmployeeViewModel?

Как называются ваши классы окон? (как называется ваш .xaml файл?)

Соглашение об именах гласит, что вы создаете один ViewModel класс для View (представление представляет собой пару .xaml / .xaml.cs)

Если у вас есть одно окно, в котором отображается список сотрудников и учебных курсов, то у вас будет что-то вроде этого:

namespace Models
{
  public class Employee : INotifyPropertyChanged { ... }
  public class TrainingCourse : INotifyPropertyChanged { ... }
}

namespace ViewModels
{
  // assuming you have TrainingWindow.xaml

  public class TrainingWindowViewModel : INotifyPropertyChanged
  {
    public ObservableCollection<TrainingCourse> TrainingCourses
    { get{ return m_trainingCourses; } }
    { set{ m_trainingCourses = value; RaisePropertyChanged("TrainingCourses"); } }

    ...
  }

  // so on and so forth
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...