【发布时间】:2016-06-02 20:40:28
【问题描述】:
我正在研究 NHibernate 和 MVVM,遇到了以下问题:
一旦 nhibernate 上的模型类应该是 POCO 对象,还有另一种方法可以在模型类上实现 IDataErrorInfo 和 INotifyPropertyChanged 吗?
例如:
public class Person
{
public virtual int ID { get; set; }
public virtual string firstName { get; set; }
public virtual string lastName { get; set; }
public virtual string phoneNumber{ get; set; }
//...
//implementation of equals and hash
//...
}
INotifyPropertyChanged 实现
public class Person : INotifyPropertyChanged
{
public virtual int ID { get; set; }
public virtual string firstName { get; set; }
public virtual string lastName { get; set; }
public virtual string phoneNumber{ get; set; }
public virtual string FirstName
{
get { return firstName; }
set
{
firstName = value;
RaisePropertyChanged("FirstName");
}
}
public virtual string LastName
{
get{ return lastName; }
set
{
lastName = value;
RaisePropertyChanged("LastName");
}
}
public virtual string PhoneNumber
{
get { return phoneNumber;}
set
{
phone = value;
RaisePropertyChanged("Phone");
}
}
}
#region INofityPropertyChanged members
public virtual event PropertyChangedEventHandler PropertyChanged;
public virtual void RaisePropertyChanged(string PropertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
#endregion
请注意,INotifyPropertyChanged(或其他接口,如 IDataErrorInfo)代码与域无关。
问题是:从良好建模的角度来看,这是否可以接受? 我应该在我的 ViewModel 上实现这些接口吗?
【问题讨论】:
-
您的问题令人困惑。你认为 POCO 是什么意思?这如何阻止您实现这些接口?您可能应该扩展您的问题以描述一个具体问题 - 目前它太宽泛了。
-
POCO 不是一个只包含与域有关的字段的类吗?在模型上实现这些接口时,我是否违反了这条规则?
标签: c# nhibernate mvvm