如何在DataAnnotations中处理这种验证困境

时间:2012-02-03 13:45:31

标签: c# oop design-patterns

我有一个如下所示的类结构:

class Person
{
public virtual string FirstName {get;set;}
public virtual string LastName {get;set;}
public virtual Address HomeAddress {get;set;}
}

class Address
{
public virtual string Street {get;set;}
public virtual string City {get;set;}
public virtual string State {get;set;}
public virtual string ZipCode {get;set;}
public virtual string Country {get;set;}
}

然后我想到了一个具有必需地址的人和一个使用RequiredAddress的人......所以我的新“必填”地址如下所示:

class RequiredAddress
: Address
{
[Required]
public override string Street {...}
[Required]
public override string City {...}
[Required]
public override string State {...}
[Required]
public override string ZipCode {...}
[Required]
public override string Country {...}
}

但是当我刚刚在RequiredPerson地址的Address字段中新建一个RequiredAddress实例时,MVC似乎无法检测到[Required]标记,我最终不得不这样做:

class PersonRequiredAddress
    : Person
{
public new RequiredAddress Address {get;set;}
}

现在,因为我们必须这样做,所以我们不得不重新做DAL以处理对象的差异......这对我来说感觉像是一种可怜的代码味道。任何人都可以为我们面临的这种困境提供更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以将Person更改为class Person<TAddress> where TAddress : Address吗?然后是class PersonRequiredAdderss : Person<RequiredAddresss>

答案 1 :(得分:0)

看看动态附加数据注释

其他人在这里得到了这个问题 DataAnnotations dynamically attaching attributes