首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET中多页表单的状态模式验证

ASP.NET中多页表单的状态模式验证
EN

Stack Overflow用户
提问于 2009-06-12 21:06:40
回答 1查看 950关注 0票数 2

我正在尝试实现一个多页注册表单的状态模式。每页上的数据将被累积并存储在一个会话对象中。

验证(包括对DB的服务层调用)应该在页面级别还是在每个状态类内部进行?换句话说,IState的具体实现应该关注验证,还是应该给它一个完全填充的有效对象?参见下面的"EmptyFormState“类:

代码语言:javascript
复制
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
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2009-06-12 21:21:30

我更喜欢在状态(集合)级别和最终提交时进行验证。一般来说,作为良好的用户体验的一部分,我更喜欢尽快进行验证。从数据验证/保护级别来看,我更喜欢在最终的保存/提交级别进行验证,以防某些东西偷偷通过,防止一般的欺骗,或者(更有可能的)将来到保存/提交点的不同路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/989048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档