2009年8月51CTO驻站专家周金桥老师精彩问答
创始人
2024-06-06 08:31:24
0

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中的代码,这部分代母具体位置就是位于

  1. #region Windows 窗体设计器生成的代码  
  2. ///   
  3. /// 设计器支持所需的方法 - 不要  
  4. /// 使用代码编辑器修改此方法的内容。  
  5. /// 
  6.  
  7. private void InitializeComponent()  
  8. {  
  9. //控件属性设置代码  
  10. }  
  11. #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中的选项卡时效果的例子,就是我当初写的。

【编辑推荐】

  1. .NET VS Java平台之争的理性思考
  2. .NET C# DES入门浅析
  3. .NET写入文本文件的操作浅析
  4. .NET自定义控件应该如何实现?
  5. 浅析.NET 4.0和Visual Studio 2010多定向支持

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...