1

假设我有一个值对象类 FullName,它用作 Employee 实体类中的属性。FullName 可能有中间名首字母、昵称等;但从域的角度来看,我只想强制 FullName 的 FirstName 和 LastName 属性都被重视。

我想将此表示为 EmployeeValidator 的一部分:ValidationDef{Employee} 对象,而不是属性。

我是否首先需要为 FullName(即 FirstAndLAstNameRequired)创建一个类验证器,然后说 Employee 中的 FullName 属性是有效的(使用一些 ValidAttribute 的啰嗦形式)?

顺便说一句,该文档似乎仍然是最好的,但它确实看起来已经过时了三年。我错过了什么新的东西吗?

干杯,
贝里尔

更新

我还没有弄清楚这一点,但我在这里找到了可能是 NIB 验证器信息的最佳来源: http ://fabiomaulo.blogspot.com/search/label/Validator

这里有一些伪代码也可以更好地表达这个问题:

/// <summary>A person's name.</summary>
public class FullName
{

    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
    public virtual string MiddleName { get; set; } 
    public virtual string NickName { get; set; } 
}

public class EmployeeValidator : ValidationDef<Employee>
{
    public EmployeeValidator()
    {
        Define(x => x.FullName).FirstAndLastNameRequired();  // how to get here!!
    }
}

大卫更新

public class FullNameValidator : ValidationDef<FullName>
{
    public FullNameValidator() {

        Define(n => n.FirstName).NotNullable().And.NotEmpty().And.MaxLength(25);
        Define(n => n.LastName).NotNullable().And.NotEmpty().And.MaxLength(35);

        // not really necessary but cool that you can do this
        ValidateInstance
            .By(
                (name, context) => !name.FirstName.IsNullOrEmptyAfterTrim() && !name.LastName.IsNullOrEmptyAfterTrim())
            .WithMessage("Both a First and Last Name are required");
    }
}

public class EmployeeValidator : ValidationDef<Employee>
{
    public EmployeeValidator()
    {
        Define(x => x.FullName).IsValid();  // *** doesn't compile !!!
    }
}
4

1 回答 1

1

要在验证员工时验证 FullName,我认为您可以执行以下操作:

public class EmployeeValidator : ValidationDef<Employee>
{
    public EmployeeValidator()
    {
        Define(x => x.FullName).IsValid();
        Define(x => x.FullName).NotNullable(); // Not sure if you need this
    }
}

那么 FullName Validator 就像这样:

public class FullNameValidator : ValidationDef<FullName>
{
    public EmployeeValidator()
    {
        Define(x => x.FirstName).NotNullable();
        Define(x => x.LastName).NotNullable();
    }
}

或者,我认为您可以执行以下操作(尚未检查语法):

public class EmployeeValidator: ValidationDef<Employee>
{
public EmployeeValidator() {

    ValidateInstance.By((employee, context) => {
        bool isValid = true;
        if (string.IsNullOrEmpty(employee.FullName.FirstName)) {
            isValid = false;
            context.AddInvalid<Employee, string>(
                "Please enter a first name.", c => c.FullName.FirstName);
        } // Similar for last name
        return isValid;
    });
}
}
于 2011-01-30T05:22:54.233 回答