2009-06-12 4 views
1

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

Répondre

0

Je préfère valider à la fois au niveau de l'État (collecte) et la validation finale. En général, je préfère valider le plus tôt possible dans le cadre d'une bonne expérience utilisateur. A partir d'une validation des données/niveau de protection que je préfère valider à la finale sauver/commit niveau et juste au cas où quelque chose faufilé à travers, la protection contre la ruse generall, ou (plus probablement) un itinéraire différent au point de sauvegarde/commit dans l'avenir.

+0

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

Questions connexes