MVVM的命名约定?

时间:2009-06-29 05:50:39

标签: wpf mvvm

我在为MVVM应用程序命名类时苦苦挣扎。

我有一个TrainingCourse,它被称为TrainingCourseViewModel,但我可以有很多这样的,所以我创建了一个TrainingCourseViewManager来保存课程列表并允许添加/删除它们。我还有一个EmployeeViewController,它引用了其他视图模型以及TrainingCourseViewManager。

EmployeeViewController基本上包装了所有其他视图模型和视图管理器,当它实例化时,它会获得员工,然后实例化每个视图模型和视图管理器。

问题是......人们使用哪些命名约定?

我的TrainingCourseViewManager应该被称为TrainingCoursesViewModel吗?我的EmployeeViewManager应该被称为EmployeeViewModel吗?

由于

2 个答案:

答案 0 :(得分:2)

视图模型的作用可能存在混淆。

示例中的类(以及Orion对此问题的回答)看起来更像是实际的数据模型。例如,视图模型“保留课程列表并允许添加/删除它们”是没有意义的 - 这就是数据模型应该做的事情。在视图模型上添加和删除操作不会对集合本身进行操作 - 相反,它们将访问和修改基础数据模型。

TrainingCourseViewModel类的属性是否存储实际数据值,或者包装某些TrainingCourseDataModel类的属性(带有其他处理)?或者,如果您需要序列化数据,您是否会序列化TrainingCourseViewModel对象?如果前者为真,则直接绑定到数据模型,名称中不应有“ViewModel”后缀。


关于命名约定的主题,如果名称变得过于复杂,名称空间可以提供帮助。例如:

namespace TrainingCourseView.ViewModel
{ 
class TrainingCourse {} 
class Manager {}
class Controller {}
}
...
Data.TrainingCourse course;
new ViewModel.TrainingCourse(course);

答案 1 :(得分:1)

  

我的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
}