今天和同事关于一个编程方式的处理产生分歧。在做基础信息维护时,我习惯于在控件值发生变化时直接给类的相应属性赋值,在提交的时候只需要做一些相应的判断(其实我认为有些判断也是可以放在控件失去焦点的时候去做),然后提交,这样可以避免所有事件和处理都放在提交的时候去做,数据列表的数据源与类集合进行绑定;而同事则认为这样不安全,不好控制,影响系统效率,应该所有的判断、和数据的合法性都直接在提交的时候去做,数据列表的数据源直接与数据集进行绑定,这样可以提高效率,请问大家都是怎样处理的,到底哪一种方式更能提高效率。
其实数据的正确与否在哪一步都可以判断,值发生变化都是要赋给相应的对象的,只是早赋值和晚赋值的问题,就像有人喜欢用FOR循环,有人喜欢用WHILE一样。
这个和cs/bs无关,效率估计相差无几,但是严格的说还是你同事的效率高一点。
另外,他的方法还便于维护属性,因为实例的属性赋值更集中。
如果把数据检验放到每个控件的失去焦点事件分散判断,比较糟糕。程序到处充满了lostfocus这样的事件处理代码,很难维护代码。一旦程序有变更什么的,去找到并处理那些事件程序将是噩梦,如果漏掉了那个事件程序,将可能是无法挽回的损失。
每填一次就提醒一下更好。
你同事的做法,3,5年前大家都这么做的。尤其是b/s模式下。
但是现在不一样了,很多注册,数据提交的b/s模式下,都用ajax每一步都判断,不过一般不会跳出弹出框这么极端和笨的办法,而是在界面上提示用户填写的数据有问题。
至于后面讨论的在那一层判断数据的有效性。每一层大概都要有判断。数据层要判断数据类型有效性,业务逻辑层要判断数据逻辑的正确性,界面层可能都要做判断。要想做好的程序,就不要怕麻烦,当然这个麻烦要在可控范围内。
不管是b/s还是c/s我们以前的b/s系统做法是:
离开焦点的时候由js判断数据合法性,用户提交的时候再在后台判断一次数据合法性我的观点:不管你怎么做,提交后的集中检验数据这个步骤是不能省略的