【发布时间】:2019-01-13 15:01:21
【问题描述】:
我有以下模型/视图模型对。这是一种非常常见的情况——从 ViewModel 到 Model 属性的纯映射——并且包含大量重复且容易出错的代码。
我想知道是否有更好的方法来做到这一点,特别是减少出错的机会(忘记属性,使用错误的属性名称)。
欢迎使用更多最新的语言功能,例如 CallingMemberName,但目前我不确定我是否理解它们。
public class ParametrosGeometricos
{
public double DistanciaProjetorParede { get; set; } = 2280;
public double AlturaProjetor { get; set; } = 1000;
public double AlturaInferiorProjecao { get; set; } = 1010;
public double AlturaSuperiorProjecao { get; set; } = 1940;
public double DistanciaCameraParede { get; set; } = 2320;
public double AlturaCamera { get; set; } = 1770;
public double AlturaInferiorImagem { get; set; } = 860;
public double AlturaSuperiorImagem { get; set; } = 1740;
}
public class ParametrosGeometricosViewModel : ConfiguracoesViewModel<ParametrosGeometricos>
{
// (...)
public double DistanciaProjetorParede
{
get => Model.DistanciaProjetorParede;
set
{
Model.DistanciaProjetorParede = value;
RaisePropertyChanged(() => DistanciaProjetorParede);
}
}
public double AlturaProjetor
{
get => Model.AlturaProjetor;
set
{
Model.AlturaProjetor = value;
RaisePropertyChanged(() => AlturaProjetor);
}
}
public double AlturaInferiorProjecao
{
get => Model.AlturaInferiorProjecao;
set
{
Model.AlturaInferiorProjecao = value;
RaisePropertyChanged(() => AlturaInferiorProjecao);
}
}
public double AlturaSuperiorProjecao
{
get => Model.AlturaSuperiorProjecao;
set
{
Model.AlturaSuperiorProjecao = value;
RaisePropertyChanged(() => AlturaSuperiorProjecao);
}
}
public double DistanciaCameraParede
{
get => Model.DistanciaCameraParede;
set
{
Model.DistanciaCameraParede = value;
RaisePropertyChanged(() => DistanciaCameraParede);
}
}
public double AlturaCamera
{
get => Model.AlturaCamera;
set
{
Model.AlturaCamera = value;
RaisePropertyChanged(() => AlturaCamera);
}
}
public double AlturaInferiorImagem
{
get => Model.AlturaInferiorImagem;
set
{
Model.AlturaInferiorImagem = value;
RaisePropertyChanged(() => AlturaInferiorImagem);
}
}
public double AlturaSuperiorImagem
{
get => Model.AlturaSuperiorImagem;
set
{
Model.AlturaSuperiorImagem = value;
RaisePropertyChanged(() => AlturaSuperiorImagem);
}
}
}
【问题讨论】:
-
自动映射器?你知道吗?
-
为什么不在你的(DTO?)模型中直接实现
INotifyPropertyChanged? -
@dymanoid 最后这是一个偏好问题。我喜欢将模型视为一个简单的属性包,并且视图模型具有通知属性更改的功能 - 在这种情况下用于触发自动保存到持久文件。