我正在使用WPF,目前正在为我的viewmodels设计getter / setter。我的问题是,一旦用户更改(通过setter),我应该将更改应用于模型吗?还是应该仅在调用Save()方法时将更改复制到模型?例如:
模型
public class Customer {
string Name { get; set; }
int Age { get; set; }
}
视图模型
public class CustomerVM {
//getters and setters are bound to the model.
public string Name {
get
{
return model.Name;
}
set {
model.Name = value;
}
}
public int Age {
get {
return model.Age;
}
set {
model.Age = value;
}
}
public Customer model { get; set; }
public CustomerVM(Customer model) {
SetModel(model);
}
private void SetModel(Customer model) {
this.model = model;
}
public void Save() {
CustomerService.Update(model);
}
}
是首选..
public class CustomerVM {
string name;
public string Name {
get
{
return name;
}
set {
name = value;
}
}
int age;
public int Age {
get {
return age;
}
set {
age = value;
}
}
public Customer model { get; set; }
public CustomerVM(Customer model) {
SetModel(model);
}
private void SetModel(Customer model) {
//values are copied over to VM when upon initialization
this.model = model;
this.name = model.Name;
this.age = model.Age;
}
public void Save() {
//values are copied to the model when user saves
model.Name = name;
model.Age = age;
CustomerService.Update(model);
}
}
答案 0 :(得分:2)
从最终用户的角度来看,两者的功能完全相同,即在调用Save
方法时将保存数据。如果这是您的应用程序的正确行为,您应该使用最简单的实现,这是第一个。
如果您想添加“撤消”功能,即允许用户将属性值重置为当前模型值,我可以看到第二种实现很有用。
无论如何,我通常从一个视图模型开始,该模型适应模型值,直到我需要一些矿石复杂。