2009年8月51CTO驻站专家周金桥老师简介
周金桥,网名周公,微软2008年7月MVP,51CTO专家堂成员。微软山西.NET俱乐部技术负责人。超过6年的Web开发经验,擅长ASP.NET、程序性能和安全优化。
经典问题一
从工程的角度上说,我认为代码的可维护性与可读性是极其重要的,因此我认为在开发过程中应该尽可能采用代码量少的解决方案。对于CRUD类的需求,asp.net提供的数据控件和数据源控件正好满足我的要求。
我的系统设计完全面向对象,在使用数据控件的时候就有出一点问题,请指教。举例来说:假设有一个订单系统
订单册OrderRegister负责对订单进行CRUD操作,现在我要实现创建订单的功能。
ASP.NET的数据控件对于平面对象(只包含基本类型属性的对象)支持的很好,而对于我这种立体型对象设计显示支持的不太好。我现在采用的方式是在数据控件中再嵌套一个数据控件。外层用于操作Order,内层用于操作OrderItem。但在实际开发中有非常多的细节问题需要处理。我希望可以了解到,您对这种设计,在页面上是如何处理的?
驻站专家周金桥老师精彩回答:
这种情况实际中不少见,不过说实在话我从来不在真实项目中使用数据源控件(数据源控件是一种针对初学者的、小型的网站使用),复杂的情况下尽可能使用Repeater数据绑定控件或者干脆不用任何数据绑定控件。
在某些操作过程中可能会需要对两个甚至两个以上的数据表进行操作,针对这种情况我一般是采用存储过程,这样可以保证一致性:要么所有的操作都成功,要么都不成功(使用事务)。
至于查询一般就使用视图,这样避免每次查询时都要写大量的SQL语句。
经典问题二
有关属性编辑框与Form.Designer.cs问题
控件通过属性编辑框修改属性后,是如何自动更新到Form.Designer.cs的?
驻站专家周金桥老师精彩回答:
通过属性编辑框修改属性之后,就会自动修改*.Designer.cs中的代码,这部分代母具体位置就是位于
- #region Windows 窗体设计器生成的代码
- ///
- /// 设计器支持所需的方法 - 不要
- /// 使用代码编辑器修改此方法的内容。
- ///
- private void InitializeComponent()
- {
- //控件属性设置代码
- }
- #endregion
在C#中不是有事件吗?当你在属性编辑器中编辑属性完成之后,就会激发一个事件,这样就知道是哪个属性发生了变化了,就可以在源代码中修改相应的源代码的值了。当然,我没有看VS这个IDE的源代码(实际上也不可能看到),但是我想他们大概是采用了类似的思路和方法。
有一个开源的C#编写的C#的IDE,如果有兴趣,你可以下载来看看,研究一下。
经典问题三
我在项目中遇到一个奇怪的问题,今天加班弄了一天也没有解决,郁闷死了,希望在这里能找到答案~~~
和数据量比较大有关,我的一个aspx页面在跑完服务器代码后,过了7,8分钟才显示出内容,有时甚至达到10分钟,正常显示后,画面中有个'Save' 服务器按钮,该按钮有客户端的clientclick事件和服务器端的onclick事件,我在点击该按钮后,跑了客户端代码后就直接跳出显示一个 “the page cannot be displayed”的无法显示的页面了,当然该页面的属性地址里显示的还是"Save"时的页面,即同一个页面。客户端脚本中包含的内容只是提示 confirm,是否要保存,是的话就返回true.
另外,我用数据量小一些的来测试,就是过了1,2分钟就页面就可以显示数据的。点击“Save”按钮就没问题,主要是出现问题的那个数据,在点击 “Save”时根本就没跑服务器端的代码,但是在***次加载该页的时候,即page_load时,是有跑后台代码的,所以我真不知道问题是出在哪里了,是不是由于长时间响应后才显示页面,导致了页面的代码丢失,无法提交数据,所以出现了只跑了客户端的代码,而没有跑服务器端代码,然后直接显示空白页或是本身的一个"the page cannot be displayed" 无法显示的页面呢?
驻站专家周金桥老师精彩回答:
1、确认是否利用了Page.IsPostBack属性来区分页面的***加载事件,实际上并不是每次都需要控件对因服务器控件的回传事件导致页面的加载进行响应的。
2、是否使用了正确的数据分页机制。你提到数据量少时加载过程费时较短,我感觉似乎跟你的数据加载方式有关系。可能数据量比较大,而你在显示时不管需要不需要把全部数据都提取出来了,导致效率的降低。
请见我给有关文章数据分页方面文章的链接:用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
在实际项目中经常会遇到一个表里有几K、几M以上的数据,而呈现给用户时并不会一下子都显示出来,所以都是分批展示给用户,这样一来可以减小网络传输量,二来也减轻服务器压力。
经典问题四
想再问下在控件使用方面~特别是富控件的使用~周老师有没有什么比较好的经验!还有周老师感觉在比较大的门户类型项目中哪些控件***少用~或者不用~ ...
驻站专家周金桥老师精彩回答:
对于这个问题要看实际项目情况了,一般来说使用控件会降低对开发人员的要求(比如对HTML/CSS/JS等方面的要求),但是如果处理不当有可能增加了服务器的处理负担。
对于负责的富控件在实际项目中我们一般用得比较上,而是有经验丰富的程序员用HTML/CSS/JS来实现类型的效果,在开发过程中再根据实际要求输出生成控件的那段代码。在《ASP.NET夜话》中就有一个我用JS实现的类似于WinForm中的选项卡时效果的例子,就是我当初写的。
【编辑推荐】