【发布时间】:2012-09-07 10:17:13
【问题描述】:
我想知道最好的验证方法是什么。
如果我有一个由基元、关联和其他自定义对象的集合组成的复杂对象对象,IsValid() 方法是否应该验证子对象以及根对象的所需字段/键?
如果是,这应该在某种抽象类中,还是最好使用接口?对于抽象,我需要将我的子对象接口转换为它们的具体类定义才能使用抽象方法,而对于接口验证,我相信我可以让我的子对象作为接口,因为我称之为他们的验证方法。
另外,我使用的不是 MVC,而是带有 Web 表单的 MVP(并尝试使用 DDD 原则)。
谢谢。
更新
我有一个 ScheduledMeeting 的聚合根:
class ScheduledMeeting : BaseValidation
{
ScheduledMeetingID {get;set;}
ITimeSlot TimeSlot {get;set;}
IList<IMeetingAssignee> Assignees{get;set;}
DateTime meetingDate {get;set;}
AssignEmployees(IList<IEmployees> employees){}
}
目前有一个BaseValidation抽象类,类似如下:
public bool isValid(bool validateKeys)
{
if (validateKeys)
{
ValidateRequiredFields();
ValidateKeys();
}
else
{
ValidateRequiredFields();
}
return true;
}
其中 ValidateRequiredFields() 和 ValidateKeys() 在实现对象时被覆盖。
如果我要使用上述方法并级联到 IMeetingAssigned,我需要在 ScheduledMeeting 中同时循环 ValidateKeys() 和 ValidateRequiredKeys(),将 IMeetingAssigned 转换为具体的 MeetingAssigned,然后再调用 ValidateKeys() 或 ValidateRequiredKeys()这个对象(因为它也将实现 BaseValidation)等等,一直向下。
更新 2
我被 .NET 3.5 困住,因此无法实现代码合同等(据我所知)。
【问题讨论】:
标签: c# validation domain-driven-design