不知道该怎么写这个标题,是今天突然有这么一个想法,怎么说呢,做过B/S结构的人都应该有这个困扰,虽然现在我们通过设计模式通过三层结构基本上划分了各个层的功能,做到OOP,但是在实际应用上,往往有不少时候让我们很困惑,就是Web和Logic到底如何清晰组织。我学艺不精,对Web的理解一直觉得Web就应该是从Logic中取出数据,然后负责展示;而无论多复杂的数据获取,都放在Web之上的层去实现。按理少了数据处理的逻辑,Web层应该比较好读,除去必要的一些系统生成代码,整体Code Behind代码量应该不多。可是现在的状况是,经常能看到几百行甚至几千行代码的Web层文件,细看一下,这些代码也确实写得无可厚非。比如有这些情况:
1.从Logic取出一个DataTable,你要绑定到页面上的DataGrid,那么需要写一堆处理代码,比如什么字段对应哪一列以及分页处理等等;如果DataGrid中部分列还需要包含控件,那么这部分代码量还要增加;
2.将对象属性值绑定到每个控件,比如ID属性在TextBox1中显示等等,这部分工作也很繁琐,而且几乎都是体力活的代码,同样的,把控件值绑定到对象属性也是这类情况;
3.回发数据的处理。有时我们要处理Popup Window关闭后父页面的数据刷新,然后在处理这个数据时我们不可避免要在Code Behind中写大量的业务处理逻辑;
4.权限控制。这会产生大量if...else...语句。比如如果是权限A,那么锁定TextBox1,权限B锁定TextBox2等等
5.事件重写,OnLoad、OnPreRender是最受欢迎的事件了,但是处理的大多是控件显示顺序,甚至有时是用来处理UI的。
6.更多……我提出这些问题的目的只有一个:如何减少Web层文件的代码量?我觉得这样的Web层维护是很恐怖的事情。即使我们可以写一些BasePage.cs的类来让aspx继承,但是依然无法从根本上解决Web层的复杂度。各位有没有好的建议呢?

解决方案 »

  1.   

    确实是的,正像我说的,这部分代码写得确实无可厚非。但是能否有一种良好的方式将页面数据和页面方法分离?而且很多页面里,我们需要做同样操作。
    比如用权限那个问题说。我们在A.aspx中要控制TextBox1,在B.aspx中同样也要控制,那么是否可能把这两个if语句给尽可能合并呢?
    Popup Window那个也是,很多时候我们Popup Window关闭后,给父页面传回的东西是一样,比如都是一个对象,或者都是一张图片等等,这部分是否也可以合并呢?