1

Employee エンティティ クラスでプロパティとして使用される値オブジェクト クラス FullName があるとします。FullName には、ミドルネームのイニシャル、ニックネームなどを含めることができます。しかし、ドメインの観点からは、FullName の FirstName プロパティと LastName プロパティの両方が評価されることのみを強制したいと考えています。

これを、属性ではなく EmployeeValidator : ValidationDef{Employee} オブジェクトの一部として表現したいと思います。

最初に FullName のクラス バリデーター (つまり、FirstAndLAstNameRequired) を作成し、次に Employee の FullName プロパティが Valid であると宣言する必要がありますか?

余談ですが、このドキュメンテーションは今でも最高のもののように見えますが、3 年も経っているように見えます。私が見逃した新しいものはありますか?

乾杯、
ベリル

アップデート

私はまだこれを理解していませんが、NHib Validator 情報の最良のソースと思われるものを見つけました: 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 に答える