我在为MVVM应用程序命名类时苦苦挣扎。
我有一个TrainingCourse,它被称为TrainingCourseViewModel,但我可以有很多这样的,所以我创建了一个TrainingCourseViewManager来保存课程列表并允许添加/删除它们。我还有一个EmployeeViewController,它引用了其他视图模型以及TrainingCourseViewManager。
EmployeeViewController基本上包装了所有其他视图模型和视图管理器,当它实例化时,它会获得员工,然后实例化每个视图模型和视图管理器。
问题是......人们使用哪些命名约定?
我的TrainingCourseViewManager应该被称为TrainingCoursesViewModel吗?我的EmployeeViewManager应该被称为EmployeeViewModel吗?
由于
答案 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
}