Domanda

che ho una classe di oggetti di valore, NomeCompleto, che viene utilizzato come una proprietà in una classe di entità Employee. La FullName può avere un iniziale del secondo nome, nick name, ecc; ma dal punto di vista del dominio vorrei far rispettare soltanto che sia le proprietà FirstName e LastName della FullName sono valutati.

Voglio esprimere questo come parte di un EmployeeValidator:. ValidationDef {} dipendenti oggetto, al contrario di un attributo

Do ho bisogno di fare un validatore classe per FullName (vale a dire, FirstAndLAstNameRequired) e poi dire che la proprietà FullName di dipendenti è valido (utilizzando una qualche forma loquace del ValidAttribute)?

Per inciso, sembra che questa documentazione è ancora il migliore in circolazione, ma sguardo non datata a tre anni di età. C'è qualcosa più recente che ho perso?

Saluti,
Berryl

UPDATE

non ho ancora capito questo, ma ho trovato quello che è probabilmente la migliore fonte di informazioni NHib Validator qui: http://fabiomaulo.blogspot.com/search/label/Validator

Ecco il codice pseudo di esprimere la domanda migliore troppo:

/// <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!!
    }
}

AGGIORNAMENTO PER DAVID

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 !!!
    }
}
È stato utile?

Soluzione

Per ottenere il FullName convalidato quando si convalida il dipendente, credo che si farebbe qualcosa di simile al seguente:

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

Poi il FullName Validator sarebbe solo qualcosa di simile:

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

In alternativa Penso che si potrebbe fare qualcosa di simile (non ho controllato la sintassi):

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;
    });
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top