Je suis en train de mettre en œuvre le modèle de l'Etat pour un formulaire d'inscription de plusieurs pages. Les données sur chaque page seront accumulées et stockées dans un objet de session.Validation avec l'État modèle pour les formulaires de plusieurs pages dans ASP.NET
Si la validation (y compris les appels de la couche de service à la DB) se produisent au niveau de la page ou à l'intérieur de chaque classe d'état? En d'autres termes, la mise en œuvre concrète d'IState devrait-elle concerner la validation ou devrait-elle être dotée d'un objet entièrement rempli et valide? Voir « EmptyFormState » classe ci-dessous:
namespace Example
{
public class Registrar
{
private readonly IState formEmptyState;
private readonly IState baseInformationComplete;
public RegistrarSessionData RegistrarSessionData { get; set;}
public Registrar()
{
RegistrarSessionData = new RegistrarSessionData();
formEmptyState = new EmptyFormState(this);
baseInformationComplete = new BasicInfoCompleteState(this);
State = formEmptyState;
}
public IState State { get; set; }
public void SubmitData(RegistrarSessionData data)
{
State.SubmitData(data);
}
public void ProceedToNextStep()
{
State.ProceedToNextStep();
}
}
//actual data stored in the session
//to be populated by page
public class RegistrarSessionData
{
public string FirstName { get; set; }
public string LastName { get; set; }
//will include values of all 4 forms
}
//State Interface
public interface IState
{
void SubmitData(RegistrarSessionData data);
void ProceedToNextStep();
}
//Concrete implementation of IState
//Beginning state - no data
public class EmptyFormState : IState
{
private readonly Registrar registrar;
public EmptyFormState(Registrar registrar)
{
this.registrar = registrar;
}
public void SubmitData(RegistrarSessionData data)
{
//Should Validation occur here?
//Should each state object contain a validation class? (IValidator ?)
//Should this throw an exception?
}
public void ProceedToNextStep()
{
registrar.State = new BasicInfoCompleteState(registrar);
}
}
//Next step, will have 4 in total
public class BasicInfoCompleteState : IState
{
private readonly Registrar registrar;
public BasicInfoCompleteState(Registrar registrar)
{
this.registrar = registrar;
}
public void SubmitData(RegistrarSessionData data)
{
//etc
}
public void ProceedToNextStep()
{
//etc
}
}
}
La validation se produirait définitivement à chaque étape/page. La question est: si la validation côté serveur se intérieur de la mise en œuvre concrète de istate ou sur la page, avant que les données est alimenté à la classe d'état (jetez un oeil à la méthode EmptyFormState.SubmitData)? Comment les classes d'état devraient-elles être bêtes? Devraient-ils faire leurs propres vérifications de santé mentale? – philrabin