我有兴趣了解“始终有效”实体方法(稍后与 isValid 方法相比)的支持者如何建议使用集合对对象进行建模。我真的很喜欢这种方法背后的想法,但是我很难实现它,因为我的对象变得有点复杂。我想知道,我是否需要强制用户只使用一种更新方法,并指定所有字段?
例如:
public Meeting
{
public string Name {get; protected set;} -- must have
public DateTime Time {get; protected set;} -- must have
public IWine Wine {get; protected set;} -- optional
public string Notneeded2 {get; protected set;} -- optional
public string Notneeded3 {get; protected set;} -- optional
public string Notneeded4 {get; protected set;} -- optional
public string Notneeded5 {get; protected set;} -- optional
public string Notneeded6 {get; protected set;} -- optional
public IUser Chair {get; protected set;} --must have
public List<IUsers> Users {get; protected set;} --must have
public bool isBoardRelated {get; protected set;} --must have
public List<IBoardUsers> {get; protected set;} -- if isBoardRelated, then must have
private void CheckInvariants()
{
if (blah == null &&....etc)
{
throw new ModelInvariantCheckException("Catch me and cry");
}
}
}
那么,以下是否应该只向用户提供一个构造函数和一个指定所有字段的更新方法?还是应该使用多个构造函数?允许某些属性(可选)具有公共设置器会使事情变得不一致吗?
还是人们更喜欢使用稍后必须调用的 isValid 方法?
我必须说,我的偏好是进行不变检查,因为它感觉更安全,但是必须将每个属性都添加到构造函数和更新方法中,这使得在层之间调用甚至对象设置时的速度要慢得多。由始终有效的类组成的集合加剧了这一点。