Hello World
Spiga

为WebForms说几句话,以及一些ASP.NET开发上的经验(1)

2007-12-22 02:22 by 老赵, 17183 visits

记得数年前,当ASP.NET刚出现时,天下间Web开发框架中似乎出现了一个“巨人”,WebForms这种似乎人人都能掌握的开发框架几乎瞬间流行起来。如果谁还在用传统ASP这种控制与表现混合的开发方式,似乎立即变得低俗了许多。于是乎许许多多人都学会了拖控件+绑定的方式,“Web开发人员”也越来越多,一片红火,好不热闹。

风水轮流转,不知从什么时候开始Rails框架随着RoR忽的流行了开来,.NET社区也出现了Monorail,批判WebForms声音也慢慢多了起来。如今微软自己也推出了基于ASP.NET平台的MVC框架,很多WebForms的反对者似乎更加自信了:连微软自己都抛弃了WebForms,证明WebForms的确该退出历史舞台了,也听到了一些类似于“WebForms不适合Web开发已经是公认的事实”这样“无比肯定”的话。先不说微软推出MVC到底是不是意味着它抛弃了WebForms,单从那些MVC追捧者们“念念不忘”的WebForms的缺点上来看,我认为他们大部分只是在“跟风”,就和当年许许多多人追捧WebForms一样。

不过我必须承认,我对ASP.NET MVC的了解仅限于Scott Gu博客上所写的内容,至今还没有下载过ASP.NET 3.5 Extensions CTP。而对于RoR和Monorail也仅限于一些资料和示例,从来没有写过一行代码。按照我的“标准”,我自己是没有资格评论MVC框架的优劣的。不过我还是想写这篇文章,因为我只会WebForms平反,而不会“贬低”MVC框架;我只是想证明WebForms的那些缺点到底真的是缺点,还是开发人员自身没有好好利用起这把利器。因此我将会根据我的经验,一一回应对WebForms比较常见的指责。如果措辞上有任何的不妥,也请大家多多包涵。

我下面提到的做法,都是在经过实际开发过程检验的(例如开发人员与美工的合作),可能不是最佳,但是我认为还是不错的。

一、ViewState

HTTP是无连接无状态的协议,因此ASP.NET中提出了ViewState的概念,这样数据被重新Post回页面时,页面(控件)的状态就能恢复,因此才有了很多丰富的功能,例如一些复杂的控件事件。但是ViewState带来的问题就是,如果使用不当,那么页面体积就会增加许多,网络中传输的数据太多自然会影响性能。

但是ViewState真是必须的吗?我可以很负责任地说,在如今大部分Web应用的页面中,出现的几乎都是大量的链接,点击链接就会跳转到一个和当前页面完全无关的新页面,这样的话,页面上的ViewState又有什么用?因此我如果新建一个Web项目,做的第一件事情就是去Web.config中将enableViewState从全局关闭——同时关闭的还有enableSessionState,这也是影响性能的因素之一(stateless也便于做Web服务器层面的负载均衡)。

有人曾经反驳我,关闭了ViewState,用WebForm还有什么意义?我的答案是:意义多的很。WebForm提供了控件模型,我能够使用“人人都能看懂和编写”的方式来设置或读取一个文本框里的值。我能轻松地响应不同按钮的事件来编写触发各种业务逻辑。这就是意义,WebForms的开发还是非常简单而清晰的(在一定程度上吧,不要“滥用”永远是正确的)。

嗯?刚才不是说只有保持ViewState才能使用控件的事件吗?没有ViewState怎么从控件中重新获取状态呢?请注意我之前所说的是“复杂事件”。什么是复杂事件?TextBox的TextChange事件就是“复杂事件”,GridView的Command事件也是复杂事件,但是Button的Click事件就是“简单事件”;与此相对的,GridView里的每一行的数据每一个子控件的状态是“复杂状态”,而TextBox的Text属性则是“简单状态”。“复杂状态”和“复杂事件”需要ViewState,因为与之有关的这些“控件”是ASP.NET“无中生有”的,但是“简单事件”和“简单状态”基于页面中“必然”会提交的数据,它们自然能够还能够使用。在我的ASP.NET开发过程中,使用的几乎都是“简单事件”和“简单状态”,而印象中放弃“复杂事件”和“复杂状态”并没有给我带来任何的困扰。

当某人送给我们10件礼物,而其中只有4件是我需要的,那么为什么不能简单地放弃其余6件,偏偏要去感谢只送给我们3件礼物的人而去指责前者呢?要知道他并没有恶意,那多余的6件也没有给我们造成任何困扰。

但人就是那么奇怪。

二、性能

WebForms的一个重要特点就是一个强大(很多情况下也是“复杂”的代名词)的组件模型。这个组件模型包含一个叫做“生命周期”的玩意儿,也就是这个玩意儿被不少人指责为性能杀手。这个复杂的生命周期的确在很多时候只是“无谓”地一遍遍执行,似乎的确造成了“浪费”,但是这真的到了“杀手”级别了吗?

如果您认为这个组件模型为性能杀手,不如编写一个内置1000个动态Button控件的页面,然后部署到服务器上,我保证运行的飞快。1000个不够的话那么可以试试看3000、5000甚至10000个控件。您哪张页面上控件的数量会比这个还多?但是您多少页面的性能会比它高?也有文章说“尽可能少的使用服务器端控件,最多使用HTML控件加上runat=server”,这更加没有理由了:一个加了runat=server的HTML控件,它已经变成了服务器端控件了。而普通的HTML最后在控件树中仅仅被作为普通的文本而处理,在控件树中是用一个Literal保存其中的“字符”。至于具体内容是什么,ASP.NET根本不会关心。

造成性能问题的原因多种多样,在对性能问题进行探索和优化之前,一定要找准性能瓶颈是什么,才能对症下药。如果从某些层面上讲,将公共部分提取成新的方法,会造成执行上多一次call指令的执行,性能也就“降低”了,但是我相信没有人会因此将同样的代码到处复制。在我们接触到的Web应用中,性能瓶颈大都是在数据库访问上(或者外部Service访问,等等),多执行一次数据库查询操作可能就能抵得上内存中1亿次引用拷贝。我相信,如果一个ASP.NET应用程序的性能不高,几乎不可能是因为组件模型或生命周期造成的问题。

既然Web应用瓶颈大都在数据库访问上,那么一般该如何解决这个问题呢?最直接的方式应该是优化数据库的查询,但是最关键的可能还是缓存。君不见每个谈到Web应用性能优化的讲座都将Cache放在数一数二的位置上,因为这的确是最有效的优化方式之一。在一个并发较高的Web应用中,对一些数据进行1分钟的缓存也能带来相当可观的性能提高。其他的方式可能还有生成静态页面(没有比这访问速度更快的了),异步调用(例如一篇刚发布的文章,在数分钟后才能被搜索到也没有关系,那么何必一定要同步地、即时地写入数据或者创建索引呢?)、分离不同作用的服务器(可以为不同服务器进行有针对性的配置,例如分离图片服务器),做Web服务器端的负载均衡(stateless的重要性由此可见),对数据库进行纵向切割(加快内存中载入的数据量可以提高查询性能,并且纵向切割后能够使用多台数据库服务器分担压力),横向切割(sharding,将数据分置在不同的数据库中,以此可以通过scale out来扩展减少每台服务器的负载,提高性能),作数据冗余或Master-Slave(稍稍降低写操作的性能而提高读取数据的性能,普通Web应用大都“读取”远多于“写入”)等等。

当然我上面提到的都是应用程序实现和架构方面的东西,事实上开发一个高性能Web应用还涉及到硬件/软件/操作系统等多方面,这里就不多解释了(其实这方面我也还在探索过程中)。其实我在这里想说的仍然是,开发高性能Web应用程序的关键大都与具体所用的实现技术无关:只要“实现”正确,做法大都相同,无论Sql Server/Oracle,Windows/Linux还是ASP.NET/RoR,其本质都差不多。Ruby和C#的性能相差十倍(存疑,求证),不还是能够开发出高性能的Web应用吗?

 

相关文章:

为WebForms说几句话,以及一些ASP.NET开发上的经验(2):生成丑陋的HTML,难以进行样式控制

为WebForms说几句话,以及一些ASP.NET开发上的经验(3):生成复杂的ID难以使用JavaScript操作

未完待续:

五、MVC

六、单元测试

所属话题:WebForms与MVC
Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

171 条回复

  1. aspxphpjsprb
    *.*.*.*
    链接

    aspxphpjsprb 2007-12-22 02:48:00

    好文章,顶,抓住影响性能的瓶颈才是硬道理。

  2. Koy
    *.*.*.*
    链接

    Koy 2007-12-22 02:49:00

    以前认为不可能的事,现在给我碰上了:根据需求,我现在要做一个单个页面有500个左右TextBox,正如你所说性能也不太差,呵呵!

  3. Henry Liang
    *.*.*.*
    链接

    Henry Liang 2007-12-22 03:09:00

    同意老赵的意见。的确,webform在很大程度上,是对于http行为的一种封装,同时加上了很多附加价值,例如viewstate对于状态管理,控件模式对于开发效率的提高和开发门槛的降低。不能不说微软在这方面做得的确不错。
    但与此同时,也使得很多只懂得拖拖控件的初学者也可以“大胆”地开发项目了——却忽略了webform背后封装的内容,如此的“开发”,如何能够避免问题的产生呢?明明是人的问题,却赖到webform控件上,明明是人不懂得使用工具,却赖到工具头上,加上一些所谓的“专家”煽风点火,一些所谓的“程序员”愤青般地跟风,才造成了现在的舆论。这样的舆论的背后,事实上也隐藏着一个论断,“程序效率不高不是我开发人员的错,是webform的错,是微软的错……”。完完全全就是推卸责任的言辞。事实上,有多少程序的bug是编译器的错而多少是程序员的错?有多少服务器被攻破是防火墙的错而多少是网管的错?……
    扯远了,最后强烈支持老赵顶住舆论的压力说出真话。独立思考,实事求是,敢说真话,才是最有价值的东西。

  4. 老赵
    admin
    链接

    老赵 2007-12-22 03:21:00

    @Henry Liang
    客气了,这些其实是我的经验。WebForms如果按照微软“演示”的方式来做,的确会有问题。但是WebForms本身是很好的,合理使用,不会对开发造成影响,而且我们不会有什么损失。

  5. 武眉博<活靶子.Net>
    *.*.*.*
    链接

    武眉博<活靶子.Net> 2007-12-22 04:06:00

    说的不错。

  6. 怪怪
    *.*.*.*
    链接

    怪怪 2007-12-22 05:38:00

    嘿嘿, 老赵怒了, 这次我省劲儿了 :P

  7. Henry Liang
    *.*.*.*
    链接

    Henry Liang 2007-12-22 06:58:00

    @Jeffrey Zhao
    我也要谢谢你,谢谢你说出了我一直想说而没有说出的话。一直以来,我就看过不少职责webform的文章,加上一些跟风的言论,既让人郁闷又让人担心——担心这种言论会误导其他开发人员,甚至误导客户。
    加上我也是从一个“只会拖控件”的程序员成长起来的,也做过viewstate有半个megabyte的网页,所以我能够了解这种成长的痛苦,也深深为不负责任的言论感到痛心。
    最后再次感谢。

  8. 大石头
    *.*.*.*
    链接

    大石头 2007-12-22 08:01:00

    非常同意Jeffrey Zhao 和Henry Liang 的说法。
    我非常鄙视那些根本不懂webform原理,自己用错搞砸了,而只会把责任推到工具上的人。而这些人还自以为是的到处鼓吹,更是影响了另一批不熟悉webform原理的人,而最后大大影响了客户,实在是令人心寒哪。

    今年忙碌了一年,也是因为老板被类似的这种人给忽悠了,痛苦呀。

    ◎Henry Liang
    0.5M的viewstate不多,你不知道,我们公司的大多数网页都超过这个数。总是到了最后,运行出问题了,才找我去搞性能优化。
    好好的grid不用,偏要自己实现一个,搞得一个页面写了一千五百多个字符串连接,才两万行数据,就把一台四处理器的服务器给搞垮了……

  9. Jeffery Huang
    *.*.*.*
    链接

    Jeffery Huang 2007-12-22 08:21:00

    将enableSessionState关闭是没有问题,如果关闭ViewState的话,一些使用了ViewState的自定义服务器控件怎么办呢?另外还想请教一点,如何用简单事件和简单状态达到复杂事件和复杂状态的效果呢?谢谢

  10. 哥哥.Net
    *.*.*.*
    链接

    哥哥.Net 2007-12-22 08:27:00

    大清早起来就看到这样的好文章,一天心情都会很好。3Q~。

    现在各种技术层出不穷,作为一个技术人员,最重要的并不是成天叨咕这个好那个不好,更别说同为.net语言的web开发中说这个行那个不行,真是太没有意义,说webforms不好,mvc好,但他们的本质是什么呢?还不是.net下的bs开发,区别真的那么大吗?感觉那些程序员有点象喜欢捣闲话的女人,三八。


    另外补充一下,看了上面的几篇回复,怎么回复时间都是半夜?各位要多多注意休息啊,身体搞坏就不好过圣诞了。

  11. 随风流月
    *.*.*.*
    链接

    随风流月 2007-12-22 08:31:00

    写的不错。赞一个。

  12. 阿不
    *.*.*.*
    链接

    阿不 2007-12-22 08:34:00

    我同意,性能低下并不是WebForm的标签。性能低下一般都是由于数据库方面的瓶颈所造成的,有的人在指责性能低下是由于页面的全命周期过长引起的。总的来说它就是一个处理ProcessRequest的过程,周期的长短是由你程序代码的执行时间来决定的。
    ViewState目前我们也都不用,但不会影响到正常的开发和功能实现上。
    另外,一些缺点是有,但是很大程度上是被过度放大了。

  13. JerryChou
    *.*.*.*
    链接

    JerryChou 2007-12-22 08:37:00

    呵呵,实践才是检验真理的唯一标准,我所有开发过的项目都是基于webform的,还都用了orm,这两个东西都是那些所谓“高手”认为性能低下的东西,事实上呢,这些项目都运行的非常良好,其中不乏大数据量,高并发的项目,没听到过客户或用户有“速度慢”的抱怨。

  14. Share赖
    *.*.*.*
    链接

    Share赖 2007-12-22 08:49:00

    不管 B/S 或者 C/S ,第一次创建数据库连接总会卡住几秒。请问怎样该如何解决?谢谢

  15. 淘者天下2
    *.*.*.*
    链接

    淘者天下2 2007-12-22 08:51:00

    挺赞成您的观点的。

  16. 韩现龙
    *.*.*.*
    链接

    韩现龙 2007-12-22 08:59:00

    嗯。facebook也是asp.net webforms开发的,不一样性能刚刚地?

  17. 留恋星空
    *.*.*.*
    链接

    留恋星空 2007-12-22 09:00:00

    小弟做开发也没多久,经验有限所以常常苦恼程序究竟怎么写才能做的更好,性能更优,希望楼主多写一些这样的文章。

  18. lovecherry
    *.*.*.*
    链接

    lovecherry 2007-12-22 09:28:00

    good,cnblogs多一点这样的文章就好了。跟风的文章太多了,使得大家似乎都不知不觉爱上了MVC/WCF/LINQ。。

  19. Young.J
    *.*.*.*
    链接

    Young.J 2007-12-22 09:35:00

    @韩现龙
    facebook是webforms的吗?我了解facebook大量使用的是开源的东东,页面好像是php+mysql的!

  20. 在线翻译 [未注册用户]
    *.*.*.*
    链接

    在线翻译 [未注册用户] 2007-12-22 09:41:00


    不错

  21. henry
    *.*.*.*
    链接

    henry 2007-12-22 09:42:00

    刚想起这样一个讨论,结果楼主就上了.
    同意楼主的说法任何一样东西都有利有弊,不善用不等这样东西就失去价值.
    拿什么才适合企业级应用就更可笑...

  22. je[未注册用户]
    *.*.*.*
    链接

    je[未注册用户] 2007-12-22 09:48:00

    facebook?

    他大概是想说MySpace,不是facebook

  23. 超晨
    *.*.*.*
    链接

    超晨 2007-12-22 09:49:00

    webform就是,会用不难,用好不容易,同问◎Jeffery Huang提的问题

  24. 啊东
    *.*.*.*
    链接

    啊东 2007-12-22 09:49:00

    无论是MVC还是WebForms都只是实现开发的一种方式,无所谓孰轻孰重,只要能完成好开发,用那种我倒无谓;期待老赵的开发经验..........

  25. 重典
    *.*.*.*
    链接

    重典 2007-12-22 09:51:00

    用之不当,为祸一方....赞同...

    但"加了runat=server的HTML控件"应该的确是比.net2.0中的WebControl要快些的,因为HtmlControl没有WebControl那么多的功能和事件,所以应该是可以快些,但很多功能就完不成了

  26. 重典
    *.*.*.*
    链接

    重典 2007-12-22 09:54:00

    附:这年月Asp的大站还是有的....维护的也不错....再附:大站暂时指Alexa10W-的吧

  27. airwolf2026
    *.*.*.*
    链接

    airwolf2026 2007-12-22 09:59:00

    是呀,对于我这个大学里面接触了一些ASP,现在才开始做ASP.NET的人来说确实是好文章啊。大大的赞一个哈。期待楼主的下文。

  28. jackwang[未注册用户]
    *.*.*.*
    链接

    jackwang[未注册用户] 2007-12-22 10:00:00

    写的很好,但是问题是mvc是不是强制我们能避免一些性能损失呢?就好比不想让学生在校外犯错,最好的方法应该是不让他出校门,当然教育的好的学生,出了校门不但不犯错,还能学习很多有益的事情,但是有几个学生能做得到呢? 还是那句话,学习成本。就像c++ 效率高,但是学习成本也高。
    我觉得重要的是人,但是更重要的是让普通人都能很快学会。

    就像NBear一样,之前一直学不会,当我学会使用后,发现真的很好用

    希望老赵能举些实例来论证其观点,也能让我们这些小菜学习学习。

    顺便问一下,我有一个从webservice 返回大量结果的数组,里面是复杂对象,我绑定到gridview上,我想做分页,但是每次调用webservice返回的结果都是不同的,那么当用户访问第二页后,在访问第一页,要想保持第一页数据不变,我除了把数据放到viewstate或者session里,还有别的办法吗?我觉得这两种方法都会有很大的性能损失,希望老赵能给点好的思路,客户不同意修改webservice返回的结果就是随机,因为他有100000条数据,但是每次随机返回1000条,我要对这一千条数据再分页。

  29. watson hua
    *.*.*.*
    链接

    watson hua 2007-12-22 10:19:00

    就事论事,如果对性能有要求,瓶颈在页面生成上就优化页面,如果瓶颈在数据访问上,就优化数据访问。
    大家为什么跟风,是因为大部分程序员在不了解机制的情况下,又受到一些权威的又有煽动性的声音的影响。
    再说webform,webform的本质就决定优化到一定程度的时候必须放弃他。
    quote["当某人送给我们10件礼物,而其中只有4件是我需要的,那么为什么不能简单地放弃其余6件,偏偏要去感谢只送给我们3件礼物的人而去指责前者呢?要知道他并没有恶意,那多余的6件也没有给我们造成任何困扰。"]
    事实上"那多余的6件"给大部分人造成极大困扰。不讳言的说,asp.net程序员在所有web开发人员中,对web标准了解程度是最低的,因为asp.net对web标准了解的要求是最低的。什么是困扰,这就是困扰。
    至于"生成HTML不规则,难以进行样式控制",我倒认为站不住脚,其实生成机制是很规则的,不存在随机性。asp.net内置控件就那么多个,花两个小时看一下,也就一劳永逸了。
    再说"生成的ID难以使用JavaScript操作"(这个ID建议用小写id),这就更无稽了,仅仅是你不能直接指定它的id而已,有id就可以了,叫什么重要么?
    倒是有几个真正的asp.net局限让人非常不爽,比如服务器属性解释的优先级比<%=%>要高,让人绕了弯子去用#$。比如asp.net生成的js(所谓的回调)和程序员编写的js干扰。暂时不能一一例举。

  30. assembly
    *.*.*.*
    链接

    assembly 2007-12-22 10:34:00

    @jackwang
    还有Cache 可以使用

  31. 韩现龙
    *.*.*.*
    链接

    韩现龙 2007-12-22 10:34:00

    --引用--------------------------------------------------
    Young.J: @韩现龙
    facebook是webforms的吗?我了解facebook大量使用的是开源的东东,页面好像是php+mysql的!
    --------------------------------------------------------
    你击右键,看看源码。
    以前我也以为是php的,因为其扩展名是php,谁知那天出现的一个错误让我吓了一跳,竟然是咱们最熟悉的红黄页!!
    这是我那天的截图:
    http://www.facebook.com/photo.php?pid=228032&id=840113937

    ps:也可以是部分php,部分aspx吧

  32. JerryChou
    *.*.*.*
    链接

    JerryChou 2007-12-22 10:47:00

    @watson hua
    不知你所云

  33. jjx
    *.*.*.*
    链接

    jjx 2007-12-22 10:47:00

    @韩现龙
    facebook提供api,可以用多种语言,python,ruby,java.c#等等扩展,所以你看到一个用C#扩展的应用也不足为奇. 问题是,你访问的应用是否是facebook的核心应用还是第三方扩展的

    现在ms有了facebook的股份,估计facebook中也会侧重一些ms的技术



  34. 陈超群
    *.*.*.*
    链接

    陈超群 2007-12-22 10:48:00

    看了批判WEBFORM的,觉得WEBFORM不好,看了老赵这文章,又觉得没什么不好,搞郁闷了,希望微软自己能站出来说说话!

  35. 重典
    *.*.*.*
    链接

    重典 2007-12-22 10:58:00

    @韩现龙
    那个是用FaceBook的.netApi自己开发的东西出错了吧

  36. t-mac.NET
    *.*.*.*
    链接

    t-mac.NET 2007-12-22 11:03:00

    @陈超群
    小马过河的故事知道吧

  37. FantasySoft
    *.*.*.*
    链接

    FantasySoft 2007-12-22 11:19:00

    WebForm让更多Desktop的开发人员可以更轻松地跨入Web开发的领域,这一点的作用可谓功德无量了。事实上,在那个Web开发还是阳春白雪的年代,降低开发门槛是首当其冲的任务,WebForm的方向对了,而且做得非常棒!

    但是,任何事物都有两面性,WebForm也是如此。WebForm模糊了桌面开发和Web开发的界限就像一把双刃剑,让很多开发人员没有弄清楚HTTP是一个无状态的连接协议,我们付出的那么多劳动都是为了能够更好、更方便地保存状态。WebForm帮助我们保存了状态,让我们变得懒惰,让我们无法去了解Web应用程序的真正模型。随着开发的深入,这一点很容易成为开发人员的软肋。

    两年多以前,我写过一篇东东——.NET和系J2EE该相互学习些什么,里面有提到有关WebForm的思考。感兴趣的朋友可以看看,拍拍板砖什么的,谢谢。

  38. Klesh Wong
    *.*.*.*
    链接

    Klesh Wong 2007-12-22 11:43:00

    @陈超群
    没有绝对的好与不好吧,搞清楚两者的区别,优缺点,该用哪个的时候就用哪个。

  39. 自由、创新、研究、探索……
    *.*.*.*
    链接

    自由、创新、研究、探索…… 2007-12-22 11:48:00

    写的不错,我都使用过webforms和monorails。技术都是自己根据需要来选择的。Web from和asp.net mvc将来是asp.net 两兄弟,共同成长。 MonoRail作为ROR在.net上的实现,可以让开发人员继续发挥.net的强大框架。Monorail在将来就可以归到asp.net mvc下面,webfrom和asp.net共同促进,何不快哉。
    关键是对webfrom的机理的掌握,现在很多的同行们只会拖控件,不知道为什么只可以拖拖控件就可以。非常的期望我们同行们自其所以然。
    很多人只知道表面东西,这也是.net开发人员同其他的开发人们一个很大的不足。

  40. 北极狐
    *.*.*.*
    链接

    北极狐 2007-12-22 12:30:00

    刚刚开始编写程序的时候,就感觉Web是一个垃圾堆,很差的代码风格,特别慢的响应速度,到处报错的脚本,在操作系统级别上轻易可以实现的功能在Web 上实现的就是牛人

  41. lankey
    *.*.*.*
    链接

    lankey 2007-12-22 13:02:00

    不错!

  42. Dove.Net
    *.*.*.*
    链接

    Dove.Net 2007-12-22 13:15:00

    学到了,WEBFORM和MVC共存应该是不会有冲突的

  43. 水果阿生
    *.*.*.*
    链接

    水果阿生 2007-12-22 13:49:00

    好文章,关注

  44. 蛙蛙池塘
    *.*.*.*
    链接

    蛙蛙池塘 2007-12-22 13:55:00

    赵兄说的有理,我是昨天才开始了解monorails,感觉用它那套思路只是觉得更清爽,更底层一些,性能上我也觉得不是关键,主要是设计界面的时候可以先设计模板,然后写好数据绑定到模板上。
    做一个站点不可能上来就做到最好的性能,怎么快先怎么做出来,一期设计也许就支撑1000人,这时候你的站点没准还没有那么大的流量呢,二期访问的人多了,再找到瓶颈,去解决瓶颈,三期,四期也是去找瓶颈去,我估计那网站得更新到10期往后才能找到webfrom内部机制的瓶颈吧。

    记得你CSS也很强,有时间帮忙看两个CSS布局的问题吧,谢谢。
    http://space.cnblogs.com/question/354/
    http://space.cnblogs.com/question/353/

  45. 曲滨*銘龘鶽
    *.*.*.*
    链接

    曲滨*銘龘鶽 2007-12-22 14:01:00

    赵兄这话说的中听

    其实个人认为说 WebFrom 不好的人都是对 http dom html js css 以及web一系列综合性技术不太了解的人。

    这个世界上基本没有什么技术是不好的、只有什么更适合而已。

  46. kuafoo
    *.*.*.*
    链接

    kuafoo 2007-12-22 14:36:00

    php 也可以跑在.net下 而且性能比zend核心下还高

  47. 老赵
    admin
    链接

    老赵 2007-12-22 14:57:00

    回应http://www.cnblogs.com/szw/archive/2007/12/22/1010449.html

    我不是说WebForms在执行上不会较MVC慢,我的意识是这种一定程度上的“慢”不会造成性能瓶颈,所以根本可以忽略。比如你说的1000个按钮和GridView,难道一个应用只有服务器端这部分处理,而没有数据库访问,外部服务访问吗?
    再说PostBack,从你举的POS机的例子来看,还是一定要用PostBack,而且说“普通的Web Form 模式,会产生较多的数据量”,但是我在文章中也说了,我们完全可以不用PostBack,我们什么都没有损失。指令式的请求,MVC可以做到,WebForms也可以做到。(我虽然没有写过,但是我了解过RoR和MonoRails的开发方式和实现方式,所以这些特点还是知道的,呵呵。不了解的可能只是对于真实项目里的开发体验,比如开发效率)
    不要把PostBack和WebForms绑定起来,这完全可以分开考虑。
    也就是说,如果只限于你这片文章里说的内容:
    1、MVC能做到的,WebForms也能做到(可能有点绕,要配合URL Rewrite和一些自己写的组件等等,呵呵)。
    2、WebForms的缺点,我完全可以避开,而且没有任何损失。

  48. 老赵
    admin
    链接

    老赵 2007-12-22 15:17:00

    @怪怪
    还是你说出来看着爽快,呵呵。

  49. 老赵
    admin
    链接

    老赵 2007-12-22 15:19:00

    @Henry Liang
    微软的责任可能是:“带坏了一批程序员”。但是程序员不了解标准,HTTP、Web开发的本质等问题,我想至少有一半责任也该是程序员自己的吧。

  50. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 15:20:00

    bz的意思是不是这样:

    绑定一个gridview,rendering, 然后客户端点击delete,服务器端响应事件,执行delete 的sql,然后再绑定,rendering

    这样就不用viewstate了

    不知我理解的对不对

  51. 老赵
    admin
    链接

    老赵 2007-12-22 15:25:00

    @大石头
    --引用--------------------------------------------------
    大石头: 非常同意Jeffrey Zhao 和Henry Liang 的说法。
    我非常鄙视那些根本不懂webform原理,自己用错搞砸了,而只会把责任推到工具上的人。而这些人还自以为是的到处鼓吹,更是影响了另一批不熟悉webform原理的人,而最后大大影响了客户,实在是令人心寒哪。

    今年忙碌了一年,也是因为老板被类似的这种人给忽悠了,痛苦呀。

    ◎Henry Liang
    0.5M的viewstate不多,你不知道,我们公司的大多数网页都超过这个数。总是到了最后,运行出问题了,才找我去搞性能优化。
    好好的grid不用,偏要自己实现一个,搞得一个页面写了一千五百多个字符串连接,才两万行数据,就把一台四处理器的服务器给搞垮了……
    --------------------------------------------------------
    我觉得在ASP.NET需要拼接字符串的地方其实不多,一些数据绑定控件是非常好用的——当然不是指GridView这些,呵呵。

  52. 老赵
    admin
    链接

    老赵 2007-12-22 15:28:00

    --引用--------------------------------------------------
    Jeffery Huang: 将enableSessionState关闭是没有问题,如果关闭ViewState的话,一些使用了ViewState的自定义服务器控件怎么办呢?另外还想请教一点,如何用简单事件和简单状态达到复杂事件和复杂状态的效果呢?谢谢
    --------------------------------------------------------
    其实这个是具体情况具体分析了,如果可以的话,您可以提出您需要的应用场景,呵呵。

  53. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 15:29:00

    如果您认为这个组件模型为性能杀手,不如编写一个内置1000个动态Button控件的页面,然后部署到服务器上,我保证运行的飞快。1000个不够的话那么可以试试看3000、5000甚至10000个控件。您哪张页面上控件的数量会比这个还多?但是您多少页面的性能会比它高?

    我觉得如果一个静态页面包含1000个button不会慢于webform吧,毕竟只是html流的传输,不过听说微软建议把所有页面变成aspx,说是性能会提高,由是怎么回事呢?

  54. 老赵
    admin
    链接

    老赵 2007-12-22 15:30:00

    --引用--------------------------------------------------
    jt: 如果您认为这个组件模型为性能杀手,不如编写一个内置1000个动态Button控件的页面,然后部署到服务器上,我保证运行的飞快。1000个不够的话那么可以试试看3000、5000甚至10000个控件。您哪张页面上控件的数量会比这个还多?但是您多少页面的性能会比它高?

    我觉得如果一个静态页面包含1000个button不会慢于webform吧,毕竟只是html流的传输,不过听说微软建议把所有页面变成aspx,说是性能会提高,由是怎么回事呢?
    --------------------------------------------------------
    “微软建议把所有页面变成aspx,说是性能会提高”我没有听懂是什么意思……如果只是指扩展名的话……实在没有道理,呵呵。

  55. 老赵
    admin
    链接

    老赵 2007-12-22 15:30:00

    --引用--------------------------------------------------
    Share赖: 不管 B/S 或者 C/S ,第一次创建数据库连接总会卡住几秒。请问怎样该如何解决?谢谢
    --------------------------------------------------------
    第一次慢一点是正常的,以后就好了。

  56. 老赵
    admin
    链接

    老赵 2007-12-22 15:32:00

    --引用--------------------------------------------------
    je: facebook?

    他大概是想说MySpace,不是facebook
    --------------------------------------------------------
    嗯,MySpace是在微软平台上实现高性能应用的典型例子,至此“微软技术不适合高性能应用开发”的论调不攻自破了,呵呵。

  57. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 15:34:00

    --引用--------------------------------------------------
    Jeffrey Zhao: @Henry Liang
    微软的责任可能是:“带坏了一批程序员”。但是程序员不了解标准,HTTP、Web开发的本质等问题,我想至少有一半责任也该是程序员自己的吧。
    --------------------------------------------------------

    我有个搞java的朋友,他说:"微软把程序员当孩子养",说的不无道理,人家说穷人家的孩子早当家,我们这些大富大贵的纨绔子弟想成熟也要多长大几年啊:)

  58. 老赵
    admin
    链接

    老赵 2007-12-22 15:34:00

    @重典
    --引用--------------------------------------------------
    阿不: 我同意,性能低下并不是WebForm的标签。性能低下一般都是由于数据库方面的瓶颈所造成的,有的人在指责性能低下是由于页面的全命周期过长引起的。总的来说它就是一个处理ProcessRequest的过程,周期的长短是由你程序代码的执行时间来决定的。
    ViewState目前我们也都不用,但不会影响到正常的开发和功能实现上。
    另外,一些缺点是有,但是很大程度上是被过度放大了。
    --------------------------------------------------------
    媒体扩大效应,呵呵。

  59. 老赵
    admin
    链接

    老赵 2007-12-22 15:35:00

    --引用--------------------------------------------------
    JerryChou: 呵呵,实践才是检验真理的唯一标准,我所有开发过的项目都是基于webform的,还都用了orm,这两个东西都是那些所谓“高手”认为性能低下的东西,事实上呢,这些项目都运行的非常良好,其中不乏大数据量,高并发的项目,没听到过客户或用户有“速度慢”的抱怨。
    --------------------------------------------------------
    说ORM慢可能一个重要部分是在指责“反射”比较慢——但是道理还是一样的,和查询比起来,反射不太会成为性能瓶颈,不过这方面的优化还是比较有手段的,呵呵。

  60. 老赵
    admin
    链接

    老赵 2007-12-22 15:36:00

    --引用--------------------------------------------------
    陈超群: 看了批判WEBFORM的,觉得WEBFORM不好,看了老赵这文章,又觉得没什么不好,搞郁闷了,希望微软自己能站出来说说话!
    --------------------------------------------------------
    微软肯定会说的,只是我觉得还是要自己说给自己听最重要,呵呵。

  61. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 15:36:00

    @Jeffrey Zhao
    这是微软的建议做法,即使你做一个纯的html,你也把它写成aspx的方式,这样可能是编译的时候有优化把,不知道,不过的确有这么一说:)

  62. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 15:37:00

    --引用--------------------------------------------------
    Jeffrey Zhao: --引用--------------------------------------------------
    JerryChou: 呵呵,实践才是检验真理的唯一标准,我所有开发过的项目都是基于webform的,还都用了orm,这两个东西都是那些所谓“高手”认为性能低下的东西,事实上呢,这些项目都运行的非常良好,其中不乏大数据量,高并发的项目,没听到过客户或用户有“速度慢”的抱怨。
    --------------------------------------------------------
    说ORM慢可能一个重要部分是在指责“反射”比较慢——但是道理还是一样的,和查询比起来,反射不太会成为性能瓶颈,不过这方面的优化还是比较有手段的,呵呵。
    --------------------------------------------------------

    hibernate中反射也导致速度慢,不过他们寄希望于缓存

  63. 老赵
    admin
    链接

    老赵 2007-12-22 15:38:00

    --引用--------------------------------------------------
    jt: @Jeffrey Zhao
    这是微软的建议做法,即使你做一个纯的html,你也把它写成aspx的方式,这样可能是编译的时候有优化把,不知道,不过的确有这么一说:)
    --------------------------------------------------------
    估计有上下文吧,纯HTML静态页面的话肯定是最快的,因为Web服务器里根本不需要做太多处理,甚至于把HTML直接当作数据流输出即可,如果缓存在内存中的话连磁盘IO都省了……

  64. 老赵
    admin
    链接

    老赵 2007-12-22 15:40:00

    --引用--------------------------------------------------
    watson hua: 就事论事,如果对性能有要求,瓶颈在页面生成上就优化页面,如果瓶颈在数据访问上,就优化数据访问。
    大家为什么跟风,是因为大部分程序员在不了解机制的情况下,又受到一些权威的又有煽动性的声音的影响。
    再说webform,webform的本质就决定优化到一定程度的时候必须放弃他。
    quote["当某人送给我们10件礼物,而其中只有4件是我需要的,那么为什么不能简单地放弃其余6件,偏偏要去感谢只送给我们3件礼物的人而去指责前者呢?要知道他并没有恶意,那多余的6件也没有给我们造成任何困扰。"]
    事实上"那多余的6件"给大部分人造成极大困扰。不讳言的说,asp.net程序员在所有web开发人员中,对web标准了解程度是最低的,因为asp.net对web标准了解的要求是最低的。什么是困扰,这就是困扰。
    至于"生成HTML不规则,难以进行样式控制",我倒认为站不住脚,其实生成机制是很规则的,不存在随机性。asp.net内置控件就那么多个,花两个小时看一下,也就一劳永逸了。
    再说"生成的ID难以使用JavaScript操作"(这个ID建议用小写id),这就更无稽了,仅仅是你不能直接指定它的id而已,有id就可以了,叫什么重要么?
    倒是有几个真正的asp.net局限让人非常不爽,比如服务器属性解释的优先级比<%=%>要高,让人绕了弯子去用#$。比如asp.net生成的js(所谓的回调)和程序员编写的js干扰。暂时不能一一例举。
    --------------------------------------------------------
    请教,优化到什么程度时必须放弃它?还有就是我想知道,如果优化到了那种程度是否还值得,如果投入2倍成本才获得10%的增长……

  65. 老赵
    admin
    链接

    老赵 2007-12-22 15:41:00

    --引用--------------------------------------------------
    自由、创新、研究、探索……: 写的不错,我都使用过webforms和monorails。技术都是自己根据需要来选择的。Web from和asp.net mvc将来是asp.net 两兄弟,共同成长。 MonoRail作为ROR在.net上的实现,可以让开发人员继续发挥.net的强大框架。Monorail在将来就可以归到asp.net mvc下面,webfrom和asp.net共同促进,何不快哉。
    关键是对webfrom的机理的掌握,现在很多的同行们只会拖控件,不知道为什么只可以拖拖控件就可以。非常的期望我们同行们自其所以然。
    很多人只知道表面东西,这也是.net开发人员同其他的开发人们一个很大的不足。
    --------------------------------------------------------
    说句题外话嗯嗯……如果年龄比较接近,两兄弟一般总是从小打到大的,嘿嘿……

  66. Jeffery Huang
    *.*.*.*
    链接

    Jeffery Huang 2007-12-22 15:43:00

    --引用--------------------------------------------------
    Jeffrey Zhao: --引用--------------------------------------------------
    Jeffery Huang: 将enableSessionState关闭是没有问题,如果关闭ViewState的话,一些使用了ViewState的自定义服务器控件怎么办呢?另外还想请教一点,如何用简单事件和简单状态达到复杂事件和复杂状态的效果呢?谢谢
    --------------------------------------------------------
    其实这个是具体情况具体分析了,如果可以的话,您可以提出您需要的应用场景,呵呵。
    --------------------------------------------------------

    老赵你好
    比如,假设写了一个简单的DropDownList,可以自动添加一个空选项,并且空选项的显示文本NullToDisplay可以任意设置
    <cc1:CustomDropDownList runat="server" NullToDisplay=“Nothing” />
    如果NullToDisplay不用ViewState而用私有成员变量保存的话,即使我在客户代码中修改了NullToDisplay的值,在呈现时,NullToDisplay还是显示在页面设置的这个初始值Nothing

  67. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 15:47:00

    @Jeffrey Zhao
    50楼的问题能不能回答一下,回复太多你可能没看到,这个贴挺火的:)

    另外bz的意思是不是尽量利用控件的优势,同时避免viewstate等等的劣势
    struts中也有所谓自定义tag,我看和.net的服务器控件也差不多把,在view这层上如何展现数据我看大家都没有特别好的方式

  68. 老赵
    admin
    链接

    老赵 2007-12-22 15:48:00

    --引用--------------------------------------------------
    重典: 附:这年月Asp的大站还是有的....维护的也不错....再附:大站暂时指Alexa10W-的吧
    --------------------------------------------------------
    大都是历史遗留问题吧,因为不太可能把大站重写的。

  69. 老赵
    admin
    链接

    老赵 2007-12-22 15:50:00

    --引用--------------------------------------------------
    蛙蛙池塘: 赵兄说的有理,我是昨天才开始了解monorails,感觉用它那套思路只是觉得更清爽,更底层一些,性能上我也觉得不是关键,主要是设计界面的时候可以先设计模板,然后写好数据绑定到模板上。
    做一个站点不可能上来就做到最好的性能,怎么快先怎么做出来,一期设计也许就支撑1000人,这时候你的站点没准还没有那么大的流量呢,二期访问的人多了,再找到瓶颈,去解决瓶颈,三期,四期也是去找瓶颈去,我估计那网站得更新到10期往后才能找到webfrom内部机制的瓶颈吧。

    记得你CSS也很强,有时间帮忙看两个CSS布局的问题吧,谢谢。
    http://space.cnblogs.com/question/354/
    http://space.cnblogs.com/question/353/
    --------------------------------------------------------
    我CSS不太明白的,写的时候也要翻书,目前开发我已经完全把这方面工作交给一个很牛的人了。:)

  70. 老赵
    admin
    链接

    老赵 2007-12-22 15:51:00

    --引用--------------------------------------------------
    jt: bz的意思是不是这样:
    绑定一个gridview,rendering, 然后客户端点击delete,服务器端响应事件,执行delete 的sql,然后再绑定,rendering
    这样就不用viewstate了
    不知我理解的对不对
    --------------------------------------------------------
    这样的话虽然页面上没有ViewState了,但是多了一次无谓的查询其实反而性能降低了。我的意思是不用“复杂事件”呵呵。

  71. 老赵
    admin
    链接

    老赵 2007-12-22 15:53:00

    --引用--------------------------------------------------
    jt: @Jeffrey Zhao
    50楼的问题能不能回答一下,回复太多你可能没看到,这个贴挺火的:)
    另外bz的意思是不是尽量利用控件的优势,同时避免viewstate等等的劣势
    struts中也有所谓自定义tag,我看和.net的服务器控件也差不多把,在view这层上如何展现数据我看大家都没有特别好的方式
    --------------------------------------------------------
    看到了,不过要一点点回复。:)
    我并非说不用控件的优势(当然放弃了一部分应该有吧,比如微软“演示”时谈到的功能)。

  72. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 15:55:00

    我的意思是不用“复杂事件”呵呵。
    ------------------

    能不能在具体一点?看不懂,比如一个gridview的增删改怎么办

  73. 老赵
    admin
    链接

    老赵 2007-12-22 15:57:00

    --引用--------------------------------------------------
    Jeffery Huang:
    老赵你好
    比如,假设写了一个简单的DropDownList,可以自动添加一个空选项,并且空选项的显示文本NullToDisplay可以任意设置
    <cc1:CustomDropDownList runat="server" NullToDisplay=“Nothing” />
    如果NullToDisplay不用ViewState而用私有成员变量保存的话,即使我在客户代码中修改了NullToDisplay的值,在呈现时,NullToDisplay还是显示在页面设置的这个初始值Nothing
    --------------------------------------------------------
    不好意思我没有理解您的意思……

  74. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 15:57:00


    @Jeffrey Zhao
    @Jeffery Huang

    题外话,你们除了名字里有J的谐音,是不是都是 richer的fans啊?:)

  75. 老赵
    admin
    链接

    老赵 2007-12-22 15:59:00

    --引用--------------------------------------------------
    jt:
    能不能在具体一点?看不懂,比如一个gridview的增删改怎么办
    --------------------------------------------------------
    如果要用GirdView的增删改的话,我想ViewState的确是必须的。不过我一般总是放弃这些功能,其实一般是放弃GridView的。大部分应用我想不太需要这个吧,GridView只能显示表格,挺没有用的。

  76. Jeffery Huang
    *.*.*.*
    链接

    Jeffery Huang 2007-12-22 16:04:00

    曾经有人没有仔细看我的名字,误认为我是老赵,我都有及时说明,在这里还要给老赵说声抱歉,我不想鱼目混珠,取这个名字完全是个人喜好

  77. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:06:00

    --引用--------------------------------------------------
    Jeffrey Zhao: --引用--------------------------------------------------
    jt:
    能不能在具体一点?看不懂,比如一个gridview的增删改怎么办
    --------------------------------------------------------
    如果要用GirdView的增删改的话,我想ViewState的确是必须的。不过我一般总是放弃这些功能,其实一般是放弃GridView的。大部分应用我想不太需要这个吧,GridView只能显示表格,挺没有用的。
    --------------------------------------------------------

    呵呵,这个回答我还真是挺失望,java最羡慕我们的恐怕就是微软主推的gridview.

    我说的那个查询的不用viewstate其实不是一无是处的,viewstate占用的是网络,查询占用的是服务器数据库,看你的具体的瓶颈在哪里,有的时候也不失为一种解决办法.

    我前一段看到一个言论我觉得挺有道理,以后asp.net前台最有可能的是mvc + 模板,后台用的人少,数据负担小,由webform负责

    java也有jsf,组件式的也挺好,可是应该没有viewstate把,viewstate应该属于微软的独创把.真正微软的独创还真挺少:)不过命运如何就不好说了,呵呵


  78. Jeffery Huang
    *.*.*.*
    链接

    Jeffery Huang 2007-12-22 16:12:00

    public class CustomDrowDownList : DropDownList
    {
    private string nullToDisplay;
    public string NullToDisplay
    {
    get { return nullToDisplay; }
    set { nullToDisplay = value; }
    }

    public void LoadData()
    {
    Items.Insert(0, new ListItem(this.NullToDisplay, ""));
    Items.Add..............
    }
    }

    页面html
    <cc1:CustomDropDownList runat="server" id="drop1" NullToDisplay=“Nothing” />

    页面代码:
    drop1.NullToDisplay = "Hello";
    drop1.LoadData();

    如果是这样的话,页面上永远都不会显示Hello,除非把NullToDisplay的get和set改为用ViewState

    不知道我这样说的清不清楚...

  79. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:16:00

    困扰java的问题比如这种简单的表格控件,在.net根本不是问题(企业环境中那一点viewstate不算什么).困扰.net的问题,如数据库访问到底用什么方式orm,还是dataset等等 在java世界里早已经解决了,两个社区现在是在互相学习,知识在相互流动,不过.net程序员要学的更多一些,基础的成果在java社区那边,.net程序员有点吃亏

  80. 老赵
    admin
    链接

    老赵 2007-12-22 16:20:00

    @jt
    MVC还没有提供GridView呢,呵呵。有GirdView我们也可以不用,这丝毫不影响我们使用WebForms,呵呵。

  81. 老赵
    admin
    链接

    老赵 2007-12-22 16:22:00

    @Jeffery Huang
    我写过一个组件,能够将这种简单属性自动存放在页面的里,呵呵。
    其实ViewState也是这么做的,因为这是保存状态的唯一办法。
    不过我不介意在页面上保留这样少量字符,因为就算没有ViewState,其他框架也是这么做的,也不会影响性能。

  82. 老赵
    admin
    链接

    老赵 2007-12-22 16:24:00

    --引用--------------------------------------------------
    jt: 困扰java的问题比如这种简单的表格控件,在.net根本不是问题(企业环境中那一点viewstate不算什么).困扰.net的问题,如数据库访问到底用什么方式orm,还是dataset等等 在java世界里早已经解决了,两个社区现在是在互相学习,知识在相互流动,不过.net程序员要学的更多一些,基础的成果在java社区那边,.net程序员有点吃亏
    --------------------------------------------------------
    其实.net成果也不少吧,而且很多Java那边的理论也可以用到.NET这边来的。

  83. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:25:00

    我想现在的格局也已经挺清楚了, 个人,小中型的网站用php(python,ror,perl等等),中大型的网站和中小型企业的系统用asp.net,大型企业应用不用说也知道了

    asp.net webform在这个背景下就不是什么问题,100m的带宽如果没有蠕虫应该满足viewstate把,asp.net mvc可能是一种面对广域网的对策

  84. kiler
    *.*.*.*
    链接

    kiler 2007-12-22 16:26:00

    微软要在不推出MVC,估计网站开发这块的市场就要被PHP抢光了,看asp.net推出以后,网站开发推出过什么比较好的asp。net,别和我说cs,dnn之类的东西,有多少人用啊,以前asp时代,像动易cms,动网论坛,还有一些7788的小的asp的程序,国内的大中小型网站不少都是用asp做的,我知道的比较大的有慧聪网,现在呢这些网站基本基本都转投php了,转成asp。net极少,我相信这个网站当初还是更愿意转成asp。net的,但是他们适应不了,你可以说这些程序员水平差,掌握不了asp。net的精髓,但是有用吗,市场在流失。asp。net出来都8年了,现在在市面上还没有几个成型的网站产品,这不是这个技术的缺陷吗。我觉得MVC推出是微软重返这个市场的希望,预祝MVC能够取得成功。

  85. 看客[未注册用户]
    *.*.*.*
    链接

    看客[未注册用户] 2007-12-22 16:26:00

    不论大家怎么讨论
    我还是想说句 webform不好用
    精通html js dom 远比用好webform 容易的多

    不用vewstate的话 webform毫无优势
    用vewstate的话 很多功能必须通过写js来实现... 在webform上写js是件痛苦的事情.而且不好维护,写过复杂功能或效果服务器端控件的人都有这种体会
    .....而且 很多脚本必须到后台cs页面去绑定,调试/修改麻烦....

    div布局的网站 webform也无法做 或者做起来极其痛苦

    像gmail邮箱 google文档编辑, 这些如果用webform来做,怎么?

  86. volnet(可以叫我大V)
    *.*.*.*
    链接

    volnet(可以叫我大V) 2007-12-22 16:27:00

    讨论相当激烈~~~~~
    既然存在就一定有存在的理由,只选对的,不选贵的

  87. kiler
    *.*.*.*
    链接

    kiler 2007-12-22 16:29:00

    @jt

    你太小看php了,据我所知,国内很多大型门户网站用的就是php,百度的搜索就是用php做的。

    微软当初要是不放弃asp,把asp包装一下升级为asp mvc,同时推出webform的话就好了,至少可以把以前asp的市场顺利的接下来。

  88. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:32:00

    --引用--------------------------------------------------
    Jeffrey Zhao: @jt
    MVC还没有提供GridView呢,呵呵。有GirdView我们也可以不用,这丝毫不影响我们使用WebForms,呵呵。
    --------------------------------------------------------
    mvc不会提供gridview把,以后做表格很可能用asp的方式,写模板

    不过你说你不用gridview,我倒是挺好奇,那你是怎么处理表格是内容呢的?repeater? 你一定要教我了,我其实也不喜欢gridview,生成的html怎么那么难看啊,估计喜欢查看源文件的人都不喜欢

    另外,我觉得你算是一个另类的asp.net程序员:),如果webform的viewstate不用,gridvew不用,"复杂事件"的控件不用,那还叫webform么?或者说webform还剩下多少了? :)

  89. 老赵
    admin
    链接

    老赵 2007-12-22 16:33:00

    @jt
    WebForms合理使用,完全可以写出优秀的代码。

  90. 老赵
    admin
    链接

    老赵 2007-12-22 16:35:00

    @看客
    我还是想说,没有了ViewState和PostBack,WebForms依然有很大意义。
    我不觉的GMail这种和WebForms有什么关系(换句话说就是没有什么不能实现的),因为GMail用到的大量客户端技术,这个和任何服务器模型无关。

  91. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:35:00

    --引用--------------------------------------------------
    看客: 不论大家怎么讨论
    我还是想说句 webform不好用
    精通html js dom 远比用好webform 容易的多

    不用vewstate的话 webform毫无优势
    用vewstate的话 很多功能必须通过写js来实现... 在webform上写js是件痛苦的事情.而且不好维护,写过复杂功能或效果服务器端控件的人都有这种体会
    .....而且 很多脚本必须到后台cs页面去绑定,调试/修改麻烦....

    div布局的网站 webform也无法做 或者做起来极其痛苦

    像gmail邮箱 google文档编辑, 这些如果用webform来做,怎么?


    --------------------------------------------------------

    google就不用说了,这帮家伙骨子里就不服ms,天生一种反叛精神,骂asp.net还来不及呢,还会用webform?

  92. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:40:00

    --引用--------------------------------------------------
    kiler: @jt

    你太小看php了,据我所知,国内很多大型门户网站用的就是php,百度的搜索就是用php做的。

    微软当初要是不放弃asp,把asp包装一下升级为asp mvc,同时推出webform的话就好了,至少可以把以前asp的市场顺利的接下来。

    --------------------------------------------------------
    同意.

    :) 其实把php放低身份还是为了就和asp.net,总不能说asp.net一无是处把,这里毕竟属于.net的地盘,要不然要被人家以为我是来自java社区的来进行和平演变的策反家呢:)

    asp的淡出,给php整的更火了

  93. 老赵
    admin
    链接

    老赵 2007-12-22 16:41:00

    @jt
    MVC的模板怎么写,在WebForms里其实就可以怎么写,ASP.NET MVC不还是用了aspx作为模板吗?
    不过你说到Repeater,我很喜欢这个控件,现在3.5中还有ListView。
    其实即使没有ViewState,没有PostBack,就光拿WebForms的组件模型来说,丰富的控件依然有非常重要的意义。
    比如编写一个控件,随便哪个页面一放,就是一个独立的Tag Cloud,没有用到ViewState,没有用到PostBack,呵呵。

  94. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:43:00

    @jt

    gmail邮箱 google文档编辑也就那样,富客户端技术一普及,立马死翘翘。

    gmail邮箱再好用,能好过outlook
    google文档编辑再好用,能好过office

    你说的有道理,google其实不是什么威胁,说白了他除了搜索做的的确牛之外,别的不过都是小程序,javascript玩的比较熟练而已,.如果google没有搜索,其实就没有了品牌号召力,别的业务立马完蛋.很多人喜欢google,只是喜欢这个品牌.有点apple的感觉

  95. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:47:00

    --引用--------------------------------------------------
    Jeffrey Zhao: @jt
    MVC的模板怎么写,在WebForms里其实就可以怎么写,ASP.NET MVC不还是用了aspx作为模板吗?
    不过你说到Repeater,我很喜欢这个控件,现在3.5中还有ListView。
    其实即使没有ViewState,没有PostBack,就光拿WebForms的组件模型来说,丰富的控件依然有非常重要的意义。
    比如编写一个控件,随便哪个页面一放,就是一个独立的Tag Cloud,没有用到ViewState,没有用到PostBack,呵呵。
    --------------------------------------------------------

    实不相瞒,我曾经在后台代码里面直接输出html代码,因为实在看不过一些控件的
    输出,不过调试太麻烦了,后来就不敢造次了:)

  96. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 16:50:00

    --引用--------------------------------------------------
    Jeffrey Zhao: @jt
    WebForms合理使用,完全可以写出优秀的代码。
    --------------------------------------------------------
    这点我相信,我希望你能多写点这方面的资料,让大家也都借鉴借鉴,我也很想学

  97. 老赵
    admin
    链接

    老赵 2007-12-22 16:52:00

    @jt
    我很不喜欢在后台直接写HTML代码,不过我觉得web控件唯一不爽的应该也只是id吧——GirdView这种庞然大物不算。:P

  98. 老赵
    admin
    链接

    老赵 2007-12-22 16:53:00

    @jt
    我的建议很简单,其实就是:多用“纯粹”的控件,比如Repeater,呵呵。

  99. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 17:03:00

    --引用--------------------------------------------------
    kiler: 微软要在不推出MVC,估计网站开发这块的市场就要被PHP抢光了,看asp.net推出以后,网站开发推出过什么比较好的asp。net,别和我说cs,dnn之类的东西,有多少人用啊,以前asp时代,像动易cms,动网论坛,还有一些7788的小的asp的程序,国内的大中小型网站不少都是用asp做的,我知道的比较大的有慧聪网,现在呢这些网站基本基本都转投php了,转成asp。net极少,我相信这个网站当初还是更愿意转成asp。net的,但是他们适应不了,你可以说这些程序员水平差,掌握不了asp。net的精髓,但是有用吗,市场在流失。asp。net出来都8年了,现在在市面上还没有几个成型的网站产品,这不是这个技术的缺陷吗。我觉得MVC推出是微软重返这个市场的希望,预祝MVC能够取得成功。
    --------------------------------------------------------

    asp.net在内部管理系统用的还可以吧(心有点虚,呵呵),广域网的网站,好像myspace是一个大例子把. php的免费和开源也是助长流行的因素,vs.net不但贵而且更新还快,这么算来 msdn订阅也不贵,不过一切就绑在ms身上了,office,sharepoint... 你就进套了:)

  100. kiler
    *.*.*.*
    链接

    kiler 2007-12-22 17:04:00

    @jt

    DataGrid其实挺好用,但是一点,你要完全完全用面向对象的思想去用他,你会觉得datagird很好很强大的,只要不是对界面要求比较高的话,DataGrid用来显示表格还是很高效的。

  101. kiler
    *.*.*.*
    链接

    kiler 2007-12-22 17:06:00

    @jt
    内网的东东还是不少的,也还有不少大的应用,据我所知,石油、银行、海关都有投入生产的大型业务系统使用。

  102. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 17:09:00

    --引用--------------------------------------------------
    Jeffrey Zhao: @jt
    我很不喜欢在后台直接写HTML代码,不过我觉得web控件唯一不爽的应该也只是id吧——GirdView这种庞然大物不算。:P
    --------------------------------------------------------
    你就是对gridview另眼相看:),你一定要承认你属于asp.net边缘人,呵呵

    大家说了这么多,我觉得其实大家对webform或者说控件拖拉都有感情,从这个角度讲好不好,合不合适都是次要了,大家还是在怀念vb和delphi那个年代把,呵呵,希望silverlight能给我们一个新的经典

  103. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 17:15:00

    --引用--------------------------------------------------
    kiler: @jt

    DataGrid其实挺好用,但是一点,你要完全完全用面向对象的思想去用他,你会觉得datagird很好很强大的,只要不是对界面要求比较高的话,DataGrid用来显示表格还是很高效的。
    --------------------------------------------------------
    完全面向对象在.net里面很难做到,不用说web view这层,就是orm 和datagrid
    怎么结合?gridview倒是可以object datasource,不过必须用ms的方式,自定义实体很多时候不好使,最后还是dataset,tableadapter,datareader,现在有linq了,一系列倒挺好,连数据源也有了,可是都是ms提供好了,自己想做些更动都不能,完全进入束缚了.

  104. SZW
    *.*.*.*
    链接

    SZW 2007-12-22 17:18:00

    --引用--------------------------------------------------
    jt: --引用--------------------------------------------------
    kiler: @jt

    DataGrid其实挺好用,但是一点,你要完全完全用面向对象的思想去用他,你会觉得datagird很好很强大的,只要不是对界面要求比较高的话,DataGrid用来显示表格还是很高效的。
    --------------------------------------------------------
    完全面向对象在.net里面很难做到,不用说web view这层,就是orm 和datagrid
    怎么结合?gridview倒是可以object datasource,不过必须用ms的方式,自定义实体很多时候不好使,最后还是dataset,tableadapter,datareader,现在有linq了,一系列倒挺好,连数据源也有了,可是都是ms提供好了,自己想做些更动都不能,完全进入束缚了.

    --------------------------------------------------------

    与ORM一起配套的,除了datagrid,datalist之类的,还有DynamicData一系列控件

  105. 老赵
    admin
    链接

    老赵 2007-12-22 17:20:00

    @jt
    是拖拉控件和这种控件的东西的确在开发上带来了很大遍历啊。

  106. 老赵
    admin
    链接

    老赵 2007-12-22 17:21:00

    @kiler
    只是表格在普通Web应用中实在不多见啊,呵呵。
    对了,另外GridView在某些时候样式很难控制,所以……

  107. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 17:22:00

    或者这么说,你想做一个充血的数据模型时,你发现,和微软提供的东西完全对不上,还要从头实现数据源和模板,从这个意义上说,mvc的出现给你卸下很多包袱,很纯洁的一个view,更自由地选择架构和模型

  108. 老赵
    admin
    链接

    老赵 2007-12-22 17:23:00

    @jt
    爱动总是能动,其实Java里的那些基础在.net里都有,说DataSet怎么怎么样,但是.net也有DataReader啊?话说我几乎不用DataSet。
    说我边缘我不知道,但是我的确把很多东西给抛弃了,把它们抛弃之后就会发现,我们其实也不缺什么啊。

  109. 老赵
    admin
    链接

    老赵 2007-12-22 17:24:00

    @jt
    WebForms也不是没有纯洁的View。
    其实MVC的特点主要还是在驱动方式,在View这层,其实WebForms和MVC相差不多。

  110. 老赵
    admin
    链接

    老赵 2007-12-22 17:24:00

    大家慢聊,我继续写文章去了。:)

  111. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 17:47:00

    其实我也不用dataset,讨厌它,边缘人不见的不好,有的时候还占到最前端,我想我们很多人是在.net平台上做类似java的事情,而不是利用.net本身提供的东西,这不能不说是.net的悲哀,就像bz说的,.....啊,bz都走了,那改日再聊把:)

  112. 怪怪
    *.*.*.*
    链接

    怪怪 2007-12-22 17:56:00

    @jt

    "困扰java的问题比如这种简单的表格控件,在.net根本不是问题(企业环境中那一点viewstate不算什么).困扰.net的问题,如数据库访问到底用什么方式orm,还是dataset等等在java世界里早已经解决了,两个社区现在是在互相学习,知识在相互流动,不过.net程序员要学的更多一些,基础的成果在java社区那边,.net 程序员有点吃亏"

    我看有些还是算了吧. 不了解.NET, 也听不懂Java阵营那边声音下面的实质是什么, 就能随便下结论?

    一个像点样的.NET程序员完全知道什么时候应该对GridView直接拿来, 什么时候应该花费多大成本去做一个适合自己的实现. 如果Java世界还羡慕什么GridView, 这只能说明一个问题, Java世界里菜鸟那是相当的多, 一个控件在一些场景下能节约多少负担或者增大多少工作量, 这个体会不出来还叫什么程序员? 在值得的情况下, 实现这么一个控件(或者任何语言/工具阵营里的其它叫法)都不愿意, 还叫什么程序员?

    无论是表格之于Java, 还是ORM之于.NET, 谁要还把这种问题当成什么高级议题去考量, 嗯, 有点那个... 不就是类似于"吃饱了不饿", "吃大饼还是吃窝头/喝白水还是喝糖水(针对不同的需求)"的事情吗?

    什么叫做Java世界是基础成果, .NET阵营就得如何如何学习? 谁来定义"基础成果"是什么? 那么我完全可以说: 恰恰相反, Java世界的东西往往是, 说好听点, 高屋建瓴, 说难听点, 全TM都是虚的.

    说实话, 这世界大多数程序员都是混饭吃, 如果大家都肯认真钻研, 就Java领域那点小破框架, 几万到几十万行代码, 十来个人合作, 踏踏实实做个1年半载, 加上讨论, 琢磨, 和重构, 是个程序员团队都搞得出来. 高层如何组织只是观念和意识的问题, 学习俩字都算不上. 比如何组织更基本的是根据需求定出如何组织的原则, Java阵营里无畏的依赖各种框架, 而不知自己思考的也是一大片一大片, 具备良好意识的程序员, Java阵营里又比.NET多几个?

    可惜的是, .NET阵营里愿意学习更基础的思维方式的人也没有几个, 如果有了自己的思维方式, 并能够不断调整和成长, 一个.NET程序员完全不必从Java阵营里获取任何营养, 因为那里除了多余的东西已经没有任何营养了! 就如人体合成氨基酸一般, 一些氨基酸属于人体自身能够合成的, 不需从外界获取, Java阵营里的一切都属于这种. 对这些高层组织经验及其模式化的框架和产品无谓崇拜, 说白了就和一个身体不好的人(比如我), 不知锻炼身体, 固本培元, 却去吃什么脑白金/黄金搭档一样!

    在软件构件领域, 什么相当于人体自身不能合成的氨基酸, 每个人都应该好好琢磨一下. 说实在的, 一些Java阵营的兄弟, 没事就跑过来来句不疼不痒的, 我不知道你什么水平. 如果就你们隐隐约约表露的, 有若干年工作经验, 接过多大多大的项目, 是的, 你可能在很多方面比一些.NET方向的初学者(比如我), 强, 但是, 居然有如此经验的人, 认知还存在着这样的盲区, 那么我觉得恰恰说明, 对于一般的思考不能上升到一定高度的程序员, 无论是Java还是.NET的从业者, 对Java领域内那些高级营养品, 还是敬而远之的好.

    无论是普通人, 专家, 还是大师, 说白了都要熬年头, 最终比拼的也不过沉淀而已, 沉淀下来的太多, 又需要一次, 两次的过滤. 到头来, 无论你干得是Java, .NET, 还是C++, 或者是Linus嘴里鄙视一切面向对象语言所固有的心智包袱的C, 我们到底剩下了什么?

    谁愿意代Java的三个表, 谁自己带去, 等到退潮的时候, 裸泳的不知道是哪个呢.

    P.S. 最后说一句, 不是说.NET社区不欢迎Java社区的讨论, 也不是说虚的东西就完全没有讨论的必要, 只是讨论事情要落在问题上, 成天不阴不阳, 这算干嘛呢?

  113. 怪怪
    *.*.*.*
    链接

    怪怪 2007-12-22 17:59:00

    @jt
    驴唇对马嘴是对不上, 问题是这有个驴唇, 你就非对马嘴?

  114. losingrose
    *.*.*.*
    链接

    losingrose 2007-12-22 18:30:00

    Web的核心需求就是变
    每隔几日就可能会改变需求,所以框架在web领域中是非常难以生存的,广泛流行的大多都是一些脚本程序,web架构,越简单就是越好,简单中融入程序思想提高开发效率,才能做到最好。
    我希望大家都不要太迷信与petshop等框架的思想了,事实表明,他们不适合做web。

  115. Jeffery Huang
    *.*.*.*
    链接

    Jeffery Huang 2007-12-22 19:42:00

    期待下文,希望能给大家一些具体的解决方案或思路,谢谢,呵呵

  116. lodestar
    *.*.*.*
    链接

    lodestar 2007-12-22 20:47:00

    好,收藏。

  117. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 21:16:00

    @怪怪
    呵呵,看来对我的评价其实还是不错的,其实我并不是java社区来的:)
    其实你说的大部分挺对,我也赞同,我可没说一定要用gridview,不过java里面没有对应的快速表格控件也是事实,当然了他们也肯定在努力,我的一朋友还做了一个,放到javaeye,大家视如珍宝.

    不过关于这句我觉得就有点过了:
    "什么叫做Java世界是基础成果, .NET阵营就得如何如何学习? 谁来定义"基础成果"是什么? 那么我完全可以说: 恰恰相反, Java世界的东西往往是, 说好听点, 高屋建瓴, 说难听点, 全TM都是虚的."

    java社区很多的创新来自学术界的观点,不是一家公司,一个研究院的研究人员搞出来的,从这个角度说,.net社区的开发人员必须虚心学习,有很多好的思想,像领域开发的思想不好么?不值得我们应用么?当然java里面也有很多主张,学院派只是其中一个.

    另外我觉得你对java社区有敌对情绪,这肯定不对,我也喜欢.net,但我告诉你,.net要想java学的还有很多,或者说相互学习也不可避免

  118. 亚历山大同志
    *.*.*.*
    链接

    亚历山大同志 2007-12-22 21:21:00

    各人有各人的活法,也就各人有各人的爱好,很多时候觉得某个东西好不好并不是这个东西是不是先进,而是使用者自身的学习经历。WebForm和MVC对比起来也不能说谁先进,谁不适合怎么怎么。总的来说WebForm是很先进的概念,不过个人觉得某些方面微软没有搞得很完善(我还是想说那个Page_Load事件,呵呵)但是微软并没有在新版本中没有继续改进WebForm框架,而是弄了个MVC的东东出来,感觉确实........
    不过老赵看不下去了才出来发这个东东还是很沉得住气了。

    个人的看法:用WebForm习惯的就跟着老赵之后的Post提高技巧。习惯MVC的也不用如传道士般的想要全世界的MVC。还是都消停了吧,希望老赵继续把这个系列写下去,我也好学习学习查漏补缺

  119. bangbang[未注册用户]
    *.*.*.*
    链接

    bangbang[未注册用户] 2007-12-22 22:25:00

    三、生成HTML不规则,难以进行样式控制

    关于这一点,我有话要说。对于微软原生的控件是没有这样的问题。但是一些其他公司出的,就难说了。最近在做GIS,用了国内某家公司的产品,结果80%以上的时间被浪费在因为生成HTML不规则导致的各种奇怪问题上了。

    我个人的看法是,一个好的框架,是应该在一定程度上能够规范程序员,也应该尽量避免各种误用问题。webform有其优势,同样也有其劣势。mvc与webform可以说是优势互补的两套东西。

  120. bangbang[未注册用户]
    *.*.*.*
    链接

    bangbang[未注册用户] 2007-12-22 22:31:00

    @亚历山大同志你
    对于亚历山大同志说的那个Page_Load,我觉得要修改很,因为要改变Page类的生命周期。现在的asp.net是在页面招待完后,Page类的生命周期就结束了。如果Page_Load变成亚历山大同志希望的那种情况,Page类的生命周期就非常类似于Java的Servlet了,然后就有可能在页面代码里面放入很多的lock语句。

  121. 老赵
    admin
    链接

    老赵 2007-12-22 22:52:00

    @亚历山大同志
    我写的东西其实非常简单,看过之后就会发现其实在技术上都是很基础的。

  122. 老赵
    admin
    链接

    老赵 2007-12-22 22:54:00

    @bangbang
    WebForms促进了控件开发行业,不知道MVC是如何来对应这一点的。
    毕竟控件的复用大大提高了效率,虽然的确有时候难以控制样式。还有我不知道MVC是不是做到了“能够规范程序员,也应该尽量避免各种误用问题”……

  123. 老赵
    admin
    链接

    老赵 2007-12-22 22:55:00

    @bangbang
    请教一下,什么是lock语句?

  124. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 22:59:00

    如果大家都肯认真钻研, 就Java领域那点小破框架, 几万到几十万行代码, 十来个人合作, 踏踏实实做个1年半载, 加上讨论, 琢磨, 和重构, 是个程序员团队都搞得出来.
    ------------------------
    呵呵,我想你把java社区的知识归结于几个框架,和几位所谓大师身上了把,所以你认为java没什么,只不过是一些人个人崇拜的结果,那你看这个问题可能还没有看到他们后面的学术流的支持,我在查阅文献的时候,发现java社区现在的做法的思想来之已久,java社区整个的知识和学术底蕴恐怕比你想象的深厚得多,让你说的那样,大家不是都成了傻瓜? 那些框架从何而来呢,不掌握其背后的思想的知识的话,只能做仿制品,移植品,.net不学怎么行呢?会永远落后. java的朋友跟我说,全世界都在做java,可只有微软在做.net,这怎么比呢?

    所以认为java有的,.net肯定能有,不一定对,.net现在的发展模式和对待学术的态度不利于一些计算机科学领域里面进展的顺利应用.看看人家java,就知道了,hibernate的创始人被邀请进入制定ejb的持久化标准,从这个意义上说,.net 要向java 学习.

    不过另外一点,我们说得再多,ms也不会听,我行我素,这种高压政治下,我倒希望多吞并几个优秀的开源项目.

    不是告诉大家不要用.net 了,没前途,转java,呵呵,我图什么啊:P.问题是.net社区必须有人这么说,整个.net社区也要有忧患意识, 不虚心学习哪行,你我这两下子跟人家差的太多了.

  125. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-22 23:19:00

    一个.NET程序员完全不必从Java阵营里获取任何营养, 因为那里除了多余的东西已经没有任何营养了! 就如人体合成氨基酸一般, 一些氨基酸属于人体自身能够合成的, 不需从外界获取, Java阵营里的一切都属于这种.
    --------------------------
    java里面的菜鸟也很多,很多人喜欢gc,所以就不学c++了,改学java.觉得好用简单.但是当我们讨论整个java社区的知识的时候,就不能看这些人了,像我刚才说的,从java社区里学习不仅是借鉴一个框架,几个架构,实质上是从学术界里面学习,从全世界的科学家和研究人员的成果中收益.对不起,微软也有学术贡献的,这么说有点对ms不公平,但是少部分把.当然,谈到软件工程这个学科,很大程度上是一种来自实践中的理论和方法论,很难形式化表述用公式推导一些理论,所以有的牛人的言论的确影响了很多人.

    今天为java社区说了不少好话,有人听的觉得刺耳,不过也要说,争做有学术底蕴的开发者而不是技术熟练工当然应该是每个人的要求,和任何技术相比,学术更保值. .net社区在拥有强大的rad开发基础和丰富的资源上,在吸收java社区的优点才是自力更生之道

  126. bangbang[未注册用户]
    *.*.*.*
    链接

    bangbang[未注册用户] 2007-12-22 23:31:00

    --引用--------------------------------------------------
    Jeffrey Zhao: @bangbang
    WebForms促进了控件开发行业,不知道MVC是如何来对应这一点的。
    毕竟控件的复用大大提高了效率,虽然的确有时候难以控制样式。还有我不知道MVC是不是做到了“能够规范程序员,也应该尽量避免各种误用问题”……
    --------------------------------------------------------
    @bangbang
    Jeffrey Zhao:请教一下,什么是lock语句?
    --------------------------------------------------------
    mvc也可以是组件式的,mvc和组件式开发并不冲突。像java的jsf,也是组件式开发,asp.net mvc 也可以用控件,只要是不依赖于System.Web.UI.HtmlControls.HtmlForm的控件,都可以在asp.net mvc中。
    用webform作复杂业务的企业级开发的时候,以最常见的三层模式为例,是很容易会把业务逻辑的东西写到aspx.cs里去的,所以就要求系统事先有一个很详细的设计,或者是要求有水平很高的人来监督项目。像一个mvc的框架,自然的,程序员把业务逻辑写到view里面也可能存在,但是发生的可能性会降低不少,这个时候,mvc框架也就在一定程度上规范了程序员了,自然相比之后可能避免一定的问题了。但是任何一个框架都不是万能的,所以最终程序的好坏,主要还是看程序员了。
    那个lock语句,就是C#里那个用于多线程锁定语句。
    每个框架都有自己的特点,在做某一特定项目的时候,针对于不同的框架,确实有优劣之分,但是这也只是针对于这个项目罢了。

  127. 老赵
    admin
    链接

    老赵 2007-12-22 23:47:00

    @jt
    MS也雇佣了一些项目的开发人员,呵呵。
    比如IronPython,比如SubSonic,但是性质的确不同,呵呵。

  128. 老赵
    admin
    链接

    老赵 2007-12-22 23:50:00

    @bangbang
    为什么用servlet会需要用lock语句阿?
    // 话说其实我曾经也是个初级的jsp程序员,呵呵……

  129. bangbang[未注册用户]
    *.*.*.*
    链接

    bangbang[未注册用户] 2007-12-23 00:13:00

    @Jeffrey Zhao
    --引用--------------------------------------------------
    Jeffrey Zhao: @bangbang
    为什么用servlet会需要用lock语句阿?
    // 话说其实我曾经也是个初级的jsp程序员,呵呵……
    --------------------------------------------------------
    因为多个请求访问同一个servlet的话,其实访问的是同一个对象,所以要有时候需要线程安全的时候,就需要线程同步(java好像是用synchronized)。

  130. 老赵
    admin
    链接

    老赵 2007-12-23 00:18:00

    @bangbang
    原来如此,大汗一下。

  131. jackwang[未注册用户]
    *.*.*.*
    链接

    jackwang[未注册用户] 2007-12-23 01:06:00

    老赵能否回答一下28楼的问题?谢谢

  132. 游客[未注册用户]
    *.*.*.*
    链接

    游客[未注册用户] 2007-12-23 01:23:00

    说的很好啊!继续关注!

  133. 老赵
    admin
    链接

    老赵 2007-12-23 02:09:00

    --引用--------------------------------------------------
    jackwang:
    顺便问一下,我有一个从webservice 返回大量结果的数组,里面是复杂对象,我绑定到gridview上,我想做分页,但是每次调用webservice返回的结果都是不同的,那么当用户访问第二页后,在访问第一页,要想保持第一页数据不变,我除了把数据放到viewstate或者session里,还有别的办法吗?我觉得这两种方法都会有很大的性能损失,希望老赵能给点好的思路,客户不同意修改webservice返回的结果就是随机,因为他有100000条数据,但是每次随机返回1000条,我要对这一千条数据再分页。
    --------------------------------------------------------
    不好意思,回复太多了,一下子看漏了。
    这个WebService很牛,我建议这1000条应该放在服务器缓存(或其他存储设备)里。其实ViewState的缺点在于需要传输太多内容,因此造成了性能问题。

  134. 怪怪
    *.*.*.*
    链接

    怪怪 2007-12-23 07:25:00

    @jt
    唉, 等你再深挖掘一下就知道了. C#/Java, 完全建立在面向对象语言的改进的基础上, 但是谁说万般皆下品, 唯有对象高了? 外面的世界广阔的紧, 现在我看闭门造车的不是别人, 正是Java, Java的圈子太小了. 比如Java有1亿个程序员, 50个专家, 10W个精尖, 够多的了吧? 再假设世界上总共只有1050个专家, 20W个精尖, 1.5亿个程序员(这个比例够失调了吧), 那么想学的更多, 甚至想在Java/C#上理解比别人更深的道路应该怎么走? 这个答案你可以自己衡量.

    对于这个假设, 你也看出了区别, 其关键点在于专家的数量. 哪怕再假设世界上有1001个所谓的"阵营", 也就是说, 每个阵营只有一个专家, 而Java一个阵营就有50个, 那么答案会变化吗? 再说了, 真实世界里, 真正的编程领域相关的专家, 而不是软件工程的专家, Java就一定比Lisp这种偏门语言多吗?

    谁谁谁参与制定EJB就说明Java社区怎么样, 这个就更站不住脚了. 这就好比好几个公司是微软推荐的控件集开发者一样. EJB又是多了不起的东西了? Linux就是一小撮人写出来的, LAMP是少数轻量级软件逐渐发展并通过Web这个机遇凑到一起的, 谁更有生命力些? 更何况一些厂商为了间接实现自己利益推的东西, 又有什么说明价值? 我们并没有讨论哪些厂商推哪些东西推成什么样了, 怎么推怎么发展的, 我们不是在讨论如何评判一个社区的价值, 而去讨论是不是存在着这么一个社区, 别的社区非向它学习不可吗?

    说点具体的, 比如Java的基石, 面向对象, 是一个工具, 也是一个束缚, 建筑于这个基础上, 就像控件限制了一些程序员的思维, 面向对象及其衍生出来的各种手法, 其实也限制了所有的面向对象程序员的思维; 直到思维和用来实践这些思维的工具通过逐渐增多的需求, 遇到了强烈的不得不可服的缺陷, 这时候什么AOP啊之类, 居然也成了经典, 其出现过程是: 面向对象先选择了某些封装的方式, 突然又发现这些方式忽略了其它的需要, 于是另辟通道. 这本来无可厚非, 哪种选择也不可能一下子把所有问题考虑到. 不过这里有一些反映社区深浅的有趣现象发生了: 多少人为这样一个选择了其它编程方式现在就不需要的具体解决方案去鼓掌(社区知识的广度)? 多少人把一个为了克服由上次选择而引发的障碍, 从而提出的具体解决手法, 上升到思想的高度(看待问题的深度)? 不是说AOP的实践上没有学问, 就像给衣服打补丁照样有很大学问一样, 但是为这个欢呼雀跃的社区, 其认识水平能比另外一个相似的社区高多少?

    你现在的情况是, 某人居然这么说Java, 于是对我做了一个假定, 包括我情绪和立场上的, 包括我对Java语言所限定那些小小的, 但很多人却误认为是很广阔的领域上的理解. 当然, 我要是Linus, 一句话振动整个技术社区, 你就是心存疑惑也不敢跟他辩论; 但是我之所以叫做"怪怪", 在于, 即使明天Gosling站在我面前, 我相信, 我心中对Java和Java like语言及围绕这种表达方式建立起来的种种模型的疑惑, 照样能把他问住, 因为有些问题是本质性的. 你看不到, 或许是因为你没有出这扇门, 总觉得这儿有个大宝藏, 同时没有发现, 脚手架背后, 就是绑住你手脚的铁链. 要知道, 有能力影响并伤害你所以你必须去质疑的, 恰恰不是一个普通网友, 而是那些大师, 那些书本, 和你信仰的社区及文化.

    C++就不要提了. C++太过繁琐. 但是仍然有一点需要注意的, Java并非是单纯的C++的改进(在对繁琐细节上的消除这方面上是), 而是同时包含着对C++的削弱, 我指的削弱并非指不能操作内存了, 而是语言所能表达的丰富性上的削弱.

    说这么多话其实毫无意义, 只是我要告诉你, Java世界里根本就没有什么全世界的科学家, 只有一些工程学家还算有些贡献而已. 你在一个.NET社区里说这些, 不会显得你有多么开阔的视野, 或者说多么能够包容, 只能说明你见过的太少: 在我眼里, .NET社区和Java社区完全是一个社区, 每个人都在说共同的语言: 职责, 多态, 模式, 等等等等. 别的不说, 就说数据和操作共同封装在一个对象上这个方式, 它的正确性真的得到了严格的证明吗?

    给你这段话一个明确的回答吧, 按照我过去没注册博客的风格:

    "java社区现在的做法的思想来之已久,java社区整个的知识和学术底蕴恐怕比你想象的深厚得多,让你说的那样,大家不是都成了傻瓜?"

    除了剩下的为数不多的真正的认识层次上的专家(对于这样的人, 拿什么搞也无所谓), 一半是傻瓜, 一半是实用主义者.

    Java照样是商业公司推举的东西(你真正了解其他领域的话, 对比一下C++或者Lisp方言就知道了), 对于实用主义者来说不可能避开, 不去学习Java领域做事的方式. 当然我也不至于偏颇的认为大公司推的东西再烂也有人用, 而是对于大多数情况, Java或者C#, 够用了, 既然够用, 为什么还要掌握更多的东西, 接受不必要的思维训练或者复杂度呢? 另外一个就是文化的不同, 让不同的阵营对不同性格的人吸引力不同. 还有更复杂的原因, 那就不是我能解释清楚的了. 只是, 实用/够用/文化/商业运作, 这些条件已经足够充分了.

    至于前一半人为什么是傻瓜呢? 因为你说的太对了, Java的很多东西由来已久, 80年代就有了, 那会儿根本没有Java, 只通过Java或者.NET去学些什么思想, 就好比隔着一层纱去看心爱的女人, 永远也看不清楚.

    傻瓜傻在哪里? 傻就傻在认为很多东西是面向对象, 是Java, 所独有的, 假设一个人捡到一颗珍珠, 就认为全世界只有这一颗, 全然不知这只是一种自然现象的产物, 全世界有的事, 这个人傻不傻?

    正是被忽悠的和实用主义者, 前者在技术思考上的稚嫩和后者在技术钻研上的浅薄, 导致了Java社区从根本上不可能真正高大起来. 是的, Java社区在不断的辐射能量(而这种能量到底是在加强还是在减弱, 还真不好说), 去影响那些打算以各种方式接触这个领域的个人和组织; 但是即使在成长, 就像别人攻击.NET一样, Java社区在真正的编程思想领域也一样, 只能不断新瓶装旧酒. 这些旧酒, 我在哪儿不能喝到, 还非得Java社区不可了? 相反, 在C++和FP(虽然截然不同)中, 甚至在现实生活中干其他事情时, 有的是我可以学习借鉴的东西, 让Java阵营里宣传的那些东西可以被浓缩成不到1/10之一的核心思想.

    傻子不可怕, 就怕傻子会说话. 我不是指普通的Java使用者或者模式学习者等等, 而是指那些在自言自语中把简单的道理弄高深, 又给IBM/SUN当免费宣传员还自认为支持了开源的家伙; 先不说国内外社区里那些所谓的"牛人"似是而非的文章, 毕竟就算简单的东西, 被说复杂就有了迷惑性不好判断; 看看IBM文档网站上那些IBM采用的"砖家"的菜鸟文章吧.... 你的敌人不是我, 而是他们, 因为我不会对你有这么大影响力决定你的技术成长道路; 如果有机会, 你应该好好跟他们辩论辩论, 如果你已经能够提出正确的问题的话.

    你知道, 我讨论的时候, 只是在说我的见解, 哪怕我这次比较出格的论断了Java社区, 我也是以已经存在的事实支撑: 比如Java社区玩的概念早在Java以前就广泛存在, 甚至在一些语言里是天然支持的; 比如AOP对OOP仅仅是一种不得已的补充, 却被热炒成这样; 比如ORM仅仅是一种非常具体的手法(并不是说其实践没有学问), 而且是计算机领域里最没深层次内涵的一个课题, 却是某些社区的重大课题.

    而有些人呢?

    "那你看这个问题可能还没有看到他们后面的学术流的支持,我在查阅文献的时候"

    你怎么知道我没有成天泡在Java社区, 比你耗的时间还长? 你怎么知道只有你查阅文献, 而我就不是有大量广泛阅读并思考的基础? 是的, 我的观点也许真是偏颇的, 论断我, 就必须有事实依据, 你没和我一起生活工作, 这个显然不可能; 那么你最好只集中在话题上. 关于话题呢, 你也不能只是说那些被重复了一万遍的东西, 而是要拿出证据: 比如面向对象为什么是好的? 如果你还停留在, "我靠, 这还用说, 明摆着..."或者重复书本上的常识的阶段, 那么请你不要把你在这个阶段的理解传播给其他人了, 而且也不要假设你的讨论对象也一定对这个问题没有思考.

    过去在Java社区和模式社区里炙手可热的大嘴Fowler, 掀起了一股又一股对某些概念追风的热潮, 不最后又投奔到XP那儿去了吗? 是的, 他说了很多打马虎眼的话, 去维护他自己作为一个技术宣传人员的声誉, 比如模式与XP不冲突啦之类, 其中的味儿你自己咂吧吧. 92年的时候还在写简单的维护脚本, 这样的人能被当作一个技术明星冉冉升起的社区, 哈~

    再比如说, GoF的<<设计模式>>的作者, 几年前接受采访时就说, 他10年前很多看法是有问题的, 并且提出了一些原则比如: 尽量不要提供框架, 而是提供工具箱. 对这些话题, 你有没有了解和思考? 如果你还停留在学习设计模式, 觉得Java那些小框架很深奥的阶段, 那么你没有办法去象我证明什么, 即使我的了解程度比你还差. 如果你有, 那么你可以拿些具体的话题来讲解, 支撑你的观点.

    我其实在社区里, 最反感的一件事, 就是讨论问题的风气和习惯, 这些习惯导致很多讨论最终变成无意义的噪声. 其中最大的噪声, 就是接近于口号的那种.

    最后说一句, 我这些帖子其实是指桑骂槐, 借题发挥, 并没有针对你这个人的意思, 而且可以说, 其实根本不包括你(如果我也象你一样做个假设的话, 看你的留言, 基本属于在技术上不是我合适的讨论对象那种, 我只是顺手抓个机会看这里热闹, 替那些不擅言辞老实巴交又老被"高明人士"挤兑的.NET从业者出点气罢了). 某些人, 不得不小人之心的去揣测, 一天到晚的瞎蹦达, 是不是属于对某种"优越感"和"自我证明"幼稚的心理需要了. 另外, 如果某一种言辞不是成为了一种想当然的习惯性说法, 只有你一个人说些没头没尾的言论, 又有什么了不起呢?

  135. 魔佛之间
    *.*.*.*
    链接

    魔佛之间 2007-12-23 12:54:00

    怪怪说得精彩!
    引用:------------------------------------------------
    最反感的一件事, 就是讨论问题的风气和习惯, 这些习惯导致很多讨论最终变成无意义的噪声. 其中最大的噪声, 就是接近于口号的那种.
    -----------------------------------------------------

  136. jt[未注册用户]
    *.*.*.*
    链接

    jt[未注册用户] 2007-12-23 16:35:00

    @怪怪
    你还真是激动啊:)一下子说了这么多,一时间我都不知道从哪里开始说了.而且也没看清你是攻击面向对象还是java语言,抑或java专家,还是我,如果有我的话,我还挺荣幸的,和这些关键字在一起.呵呵

    我可没说过,java才是面向对象,c#不好之类的话,相反,我倒认为从语言的角度来讲c#有很多特性优于java或者这么说,我更喜欢c#.
    另外我也从来没说过面向对象可以解决所有问题啊,这都是你说的,当然了,面向对象在很多领域对于复杂的软件工程问题给出了较为满意的答案,但是肯定了,没有什么方法是万能的,关键是 谁也没说他是万能的啊:)

    傻瓜傻在哪里? 傻就傻在认为很多东西是面向对象, 是Java, 所独有的, 假设一个人捡到一颗珍珠, 就认为全世界只有这一颗, 全然不知这只是一种自然现象的产物, 全世界有的事, 这个人傻不傻?
    -------------------
    当然傻了,还用说么:)关键是有谁是呢?


    你的名字还挺名副其实的,其实你发这么大脾气我也能理解,实际上你说的有些我也同意,但是我觉得你有一点理解的不对,或者是和我理解不同,就是当讨论到java社区的时候,不是光指使用java语言的从业者或者所谓大师,还有很多学术界的专家,没错,他们其中有些人可能还不屑于java语言,比如说对一个喜欢smalltalk的人你用什么能打动他呢?:)但是当他们的学术成果演变到实践中去的时候,很多时候java社区首先会成为受益者.同样,在说.net社区的时候,我也没光指代大家这些使用.net的程序员,也包括了.net社区后面的力量,当然也有专家,还有微软,微软的同盟,和.net开源社区,但是学术成果很少青睐.net,原因很多,但后面这两个力量怎么比呢?

    Java的很多东西由来已久, 80年代就有了, 那会儿根本没有Java,
    -----------------
    关于这句呢,我也想请你思考一下,为什么由来已久的东西会在java社区里面出现,(不只是java语言里面出现),而不是.net?是不是跟.net社区的风格有关?说java社区有学术流做后盾你还不同意.那你解释解释我听听,呵呵



    比如ORM仅仅是一种非常具体的手法(并不是说其实践没有学问), 而且是计算机领域里最没深层次内涵的一个课题, 却是某些社区的重大课题.
    ----------------------------------
    这句就更不能同意了,ORM成了一种简单的"做法",实际上ER会议每年还有这方面的研究论文出现.打个比方,你现在知道万有引力理论好像没什么,但是为了发展这样一个理论要多少学术上的成果呢?不能因为它成熟了就说"没深层次内涵的一个课题",何况他也并没有完全成熟.即使你指的是狭义的ORM框架,就说java的hibernate把,你说的也不对,他不是重大课题,充其量算是开源项目,结果不小心成了事实上的业界标准而已.的确,国内安心做学术的人现在并不多,因为体制,很多垃圾论文涌现,但是这不代表学术界都是乌烟瘴气的,不代表学术界都是肤浅的.

    你老提GOF,martin 那些人,好像他们欠了你钱,或者你曾经被他们毒害了一样.实际上他们的理论一部分来自于学术界,也来自实践,你不喜欢可以不用,但是他们不代表所有学术成就啊?在学术界不是听他们说什么是什么啊?

    再说,aop,对,是不优雅,我同意.可世界在变,需求在变,开发方式也要跟上时代,flower去xp了,正常,没准明天都是动态语言的天下了,也正常,以前犯错误,不允许么?人类求知的过程也是一样啊.你这就否认一切,未免不对把,按这个逻辑,我们都退回到原始社会好了,环保啊

    下面这些话那肯定是冲我来的了
    "你怎么知道我没有成天泡在Java社区, 比你耗的时间还长? 你怎么知道只有你查阅文献, 而我就不是有大量广泛阅读并思考的基础? "
    ---------------
    可我说的是什么: "那你看这个问题 可能 还没有看到他们后面的学术流的支持,我在查阅文献的时候"

    可能,不代表一定,我查文献,又没说你没有阅读基础,老兄,我也没怎么着你啊,你为免反应过激了把:)


    某些人, 不得不小人之心的去揣测, 一天到晚的瞎蹦达, 是不是属于对某种"优越感"和"自我证明"幼稚的心理需要了.
    -----------------------------
    呵呵,我看形容你也可以啊
    注没注册无所谓,登不登陆也不影响发言,你倒是注册登录了,也不见给大家带点bz这样的好东西


    看你的留言, 基本属于在技术上不是我合适的讨论对象那种
    学习设计模式 觉得Java那些小框架很深奥的阶段
    -----------------------------
    呵呵,其实术业有专攻,事实上你我不认识,只是萍水相逢,人身攻击,做这样的争吵没什么意思,记得网上有过更激烈的争吵,其中一个把自己在DOS下面写的汇编代码都贴了出来,又怎么样,最后不欢而散,何必呢,你出来放两句狠话,就表示你高人一等了? 战略上藐视可以,但是战术上不学,甚至对几个所谓大师怀有敌意,那怎么进步,你把人家问倒算本事么?爱因斯坦也有不对的时候.

    其实说句实在的,我觉得我们的讨论不是同一个层次上的,我们看的问题也不是一个方面的,我只是想说,.net社区要想进步,一定要向java社区学习,他们对的,我们要学,他们好像也觉得不对的,那我们就改进啊,他们的学术底蕴,我们不是都有,但是我们可以学啊.我说了,有人就不高兴,有必要么?大家不爱听口号,可以,但别拿自己跟java菜鸟比,虚心学习,我表达的这意思有错么?

  137. 怪怪
    *.*.*.*
    链接

    怪怪 2007-12-24 00:00:00

    @jt
    1. 我没说谁说Java万能, 我只是针对你的这种言论, 我说的很清楚, 言论变成一种惯性的说法, 这里头就存在大量问题.

    2. 我更没说你说Java更面向对象, 只是说C#和Java这样的面向对象语言已经限制了他们能做到的编程方式, 所以Java那点东西在编程思想上根本只是很小的一块.

    3. 你说学术成果更青睐Java, 你可以说说哪些学术成果, 不要空喊口号. 倒是C#上面的委托和泛型都比Java强, DLR也走在Java前面, F#这样的东西, Java社区连有都没有. 这些对于编程比较根本的特性, 比你所谓的成果要基本的多, 也重要的多. 不是你不能比, 而是你不愿意去比, 你宁愿留在Java方向更高明的错觉里.

    4. 另外, 你的另一个谬误是, 真正核心的手法或思想, 没有什么是在Java领域出现的. DP95不是, 各种面向对象的原则不是, MVC不是, 几乎就没有东西是. 这些东西在Java出现之前就大规模的被讨论和普及了, 只是那会儿*你*不知道而已. 所以我说, C#在这方面没有什么可象另一个拾人牙慧的抄袭者学习的. 当然, Java领域有一些具体的产品/开源产品先出现, 这和Java背后的大公司选取了不同的文化手段有关. 但是对于一个程序员的编程能力来说, 产品只是最终结果, 可以学习的东西相当表面. 再说一遍, 你的说法, 根本没有事实支撑, 这才是你的话站不住脚的根本原因.

    5. 关于ORM, 各有各的认识, 我也不跟你多说, 你自己多上国外看看, 在支持面向对象的阵营中本来就分为两派, 一直没有停止过争吵; 面向对象以外的阵营, 还用说吗? 这种争吵更不可能结束. 只是显然这样的问题被Java社区广泛讨论(我指的课题只是一个说法, 并不是严肃的说学术圈内的重大课题), 出现的频率相当的高. 至于这样的某一种设计方式和另一种具体实现的冲突, 是否和FP, 委托, 泛型, 根本的设计原则是一个层面的东西, 你自己判断.

    6. Fowler这样的人, 根本跟学术两字挂不上钩, 这点我想不用多说了吧? 我提到GOF, 并没有说他们怎么样似乎, 只是说你要是讨论Java社区的优点, 就必须首先从面向对象思想这一核心问题谈起, 你要是赞同框架, 就应该对GoF的言论有所理解. 想要证明什么, 可以从这些问题出发, 掰开揉碎的去证明面向对象各种理论(好歹至少Java社区倡导的得说到位吧? )的先进性, 框架产品的必要性, 然后才是Java社区存在超越其他社区价值这一说法的合法性, 而不是空喊向"XXX社区"学习的口号. 相反现在我就是在学习你, 喊出: 象C++社区学习, 象FP社区学习, 象数据社区学习, 象C/汇编社区学习, 象除Java外任何社区学习, 都是口号, 好歹我可以说清楚为什么.

    7. AOP的问题, 我说的很清楚了, AOP的出现无可厚非, 但是作为一个事实, 一个补丁被热炒, 这个现象说明了Java社区所谓在设计思路上的*整体*领先是不是靠得住. 你要不认真看我说了什么, 或者瞎矫情, 那你不必跟我讨论下去. 否则你就要证明AOP没有被热炒, 但这显然不符合实情.

    8. 不是我反映过激, 我没什么可激的. 什么用起来对我最有利, 我就不能抗拒什么, 因为我要完成工作, 对这一点我相当清楚. 我只是告诉你, 我没有看到Java社区的先进性, 是有理由支撑的. 而你没有拿出任何理由和事实去支撑你的口号, 唯一的在辩论中取得胜利的方法, 就是假设我可能不知道Java社区有什么, 可这种假设并不见得可靠.

    9. 谁说我没给别人带来什么? 我现在对.NET初学者最大的贡献, 就是横扫一切不负责任的言论, 省得他们心中迷惑. 我用不着贴什么汇编代码或者写技术文章, 先证明我的技术实力, 因为技术实力只和我的前途有关, 我无须为了展示这个, 浪费大量时间. 再者, 你我讨论的是"Java社区很值得学习", 这一论题, 那么我们就围绕"Java社区的价值"展开, 摆事实就可以了. 可惜, 除了某些具体产品上的领先之外, 我没从你的任何口号中看到事实. 如果有人非跟我说.NET社区比Java社区先进多少, 只要我看见了, 我照样要吭声. 实际上, 我认为这两个社区共性大于异性, 无论是在水平上还是什么方面, 具体方向的不同, 根本说明不了什么问题.

    10. 我对大师没有敌意, 也不否认大师的贡献, 因为我犯不着, 我在臭NB, 也不妨碍人家比我水平高得多; 我只是告诉大家, 面向对象的圈子很窄, 作为一门构筑在面向对象上的语言, Java的圈子更窄. 把眼光放的更宽一些, 就会知道, 没什么根本性的东西是非得在Java社区中学习的.

    11. 你表达的意思有没有错, 必须有事实支撑, 不然别人怎么判断你说的有没有错? 比如我吧, 设计模式的知识要点主要来自于DP, 设计原则来自于实践加思考, 对语言的认识来自于对非Java/C#类语言阵营的声音的反思, 还有很多东西四处(包括.NET阵营内部)都学得到; 没有什么是我发现非得象Java社区学习的, 要知道一个反例就能证明一个命题的错误. 在一个本来只是.NET相关的讨论中, 你非要提这种扯皮条的话题, 那么我对你的反感, 难道是毫无道理么?

  138. 怪怪
    *.*.*.*
    链接

    怪怪 2007-12-24 00:01:00

    @Jeffrey Zhao
    对不起啦, 又脏了你的地方.

  139. 老赵
    admin
    链接

    老赵 2007-12-24 01:04:00

    --引用--------------------------------------------------
    怪怪: @Jeffrey Zhao
    对不起啦, 又脏了你的地方.
    --------------------------------------------------------
    哪儿脏了,其实我蛮喜欢看你们讨论(争论?)的东西。刚才在整理接下去该怎么写MVC,东西太多最后脑子乱了,于是去你的blog里翻翻文章和讨论,刚回来看看我这边情况怎么样了,呵呵。

  140. 怪怪
    *.*.*.*
    链接

    怪怪 2007-12-24 04:34:00

    内容被禁止显示

    我服了, 我冤枉啊.

    我刚才说, 我那儿现在就是个垃圾堆, 除了废话没啥像样东西. 就像我在你这个辩论很"脏"一样, 没意义的东西, 比如灰尘, 大家不就是这么形容的吗?

    然后我又说, 你参与的这个话题, 不好理清, 因为从抽象到具体, 点太多.

    不过实际有一点在我心里很清楚的, 抛开Web MVC十多年来固有的优势不谈, 其实对于ASP.NET来说目前的MVC不是进步而是一种倒退.

    只是我还没法帮你提供支持, 因为我自己还没深入理解和实践到能轻易表述的地步.

    我知道了, 是 "蛋药".

  141. lodestar
    *.*.*.*
    链接

    lodestar 2007-12-24 11:37:00

    微软曾经推出过User Interface Process Application Block,不同于web form的界面层技术,asp.net mvc还没有研究,不知道是否是一回事。应该是适合不同的应用场景吧。

  142. carysun
    *.*.*.*
    链接

    carysun 2007-12-24 16:46:00

    怪怪的评论确实很精彩
    真希望你能多写点评论技术的文章

  143. sheng1[未注册用户]
    *.*.*.*
    链接

    sheng1[未注册用户] 2007-12-24 23:23:00

    哇,花那么多时间来争吵,有结论吗?还不如回去写的好的东西大家看看,学习下。(:

  144. txdlf
    *.*.*.*
    链接

    txdlf 2008-01-04 11:59:00

    继续

  145. 黄色期刊万万岁[未注册用户]
    *.*.*.*
    链接

    黄色期刊万万岁[未注册用户] 2008-01-25 00:36:00

    WebForm适合业务多的企业系统,MVC做Web2.0网站。。

    同意的 举手

  146. 汪江涛[未注册用户]
    *.*.*.*
    链接

    汪江涛[未注册用户] 2008-01-29 15:27:00

    如果你不是完美主义者,webforms很好很强大,关建是要吃透,viewstate一定要存在页面的hidden里吗?不一样,你放session里一样,重载Page的两个方法就行了。至于生成的HTML太乱,你可以适当控制的,比如只用你认为合适的控件,重写一部份asp.net自带的控件(大部分自带控件写得都不咋的),至于乱其8糟的id的问题,习惯了就好,我现在从不在脚本里直接用写id,都是在服务器端注册脚本来得到最终的clientid或uniqueid。

    其实我并不认为webforms有多好,这个东西太烂了,主要是1.1的时候就很烂,2.0的时候体系结构不能作太大调整,所以延续了原来的烂,并且添加了一些新的烂。

    包括ASP.NET整个框架,我个人认为ms那帮程序员或设计师们都搞得像一锅粥,如果有谁有能力重写一个新的框架出来我一定顶他个肺!

  147. 老赵
    admin
    链接

    老赵 2008-01-29 19:19:00

    @汪江涛
    我觉得asp.net和webforms都很好,很难写出也没有必要写出个新框架了,呵呵。

  148. 时尚地带 [未注册用户]
    *.*.*.*
    链接

    时尚地带 [未注册用户] 2008-01-30 01:41:00

    ASP。NET开发东西超级快

  149. 114411[未注册用户]
    *.*.*.*
    链接

    114411[未注册用户] 2008-02-18 01:05:00

     既然Web应用瓶颈大都在数据库访问上....
    -------------------------------------------
    不太认同,如果是这样,似乎WinForm程序速度应该和WebForm差不多了,不过现实中同样的数据库访问代码(访问占比例较小时),不少情况下,两者时间还是要差很多的

    另外,如果数据库访问时间占了很大的比例,那是数据访问方式上的问题,不论Win类型还是Web类型的都会耗时,所以归入Web应用瓶颈似乎不太合适

    另外,深入研究过asp和JavaScript的人, WebForm能实现的功能,他也一定可以实现,反之,进化的再深入,做出来的东东也不一定能尽如人意

  150. 老赵
    admin
    链接

    老赵 2008-02-18 09:07:00

    @114411
    web服务器还要加载图片等资源,传输的HTML也是不少的数据,所以对于服务器端来说性能瓶颈主要在数据访问,而对于客户端自然还要涉及到数据传输。如果一个WebForm应用程序和WinForms在访问数据库上差不多的话,那么性能差距就是在数据传输上了。
    像你说的,数据访问自然不是Web应用程序独有的瓶颈,但的确是大多Web应用程序的瓶颈,这其实应该已经算是共识了,呵呵。
    还有不管什么web开发技术,我认为真能称之为掌握的“深入”的话,功能总是能够实现的,如果有人不会用WebForms开发某个东西而会用asp的话,这只可能是他WebForms没有掌握好。不同技术的差距在于难易程度和开发效率——当然这点不觉得asp相对于webforms有什么优势,呵呵。

  151. 114411[未注册用户]
    *.*.*.*
    链接

    114411[未注册用户] 2008-02-19 02:29:00

    嗯,时代总是在进步的,开发工具或是框架之类的演变总是向提高生产力方向发展的,虽然多数(嗯,或者说是一部分)是以损失部分性能为代阶的:).当然,我指的是普通开发,深入的话工具仅仅只是工具而已.
    微软的技术总是越来越容易让人变懒,他不断的封装了低层(或许Java也是如此)的技术,直接从WebForm开始编程的人对有些方面理解的难度反而增加了
    我基本不做B/S方面的开发,但公司的产品是C/S 和B/S都有的,我想啊想,还是没法认同你的那点共识,哈哈,只是语言表述层上的不认同
    权当是侃大山吧.
    另外还有一点B/S技术上的问题想请教一下,有个页面,二三十个自定义输入控件,由一个静态文本框,一个输入框,和一个确定按钮组成,输入框用来修改静态文本框中的值,修改完后,都要点确定按钮,将值保存回去,然后在静态文本框中显示出来,现在的问题是这个操作有时会比较耗时(有时会达到几秒),那客户在使用时经常会要改动七八个地方的值,所以累计就要花半分钟左右了.我个人的意见是先在客户端用javascript实现类似效果,然后整块提交.
    以你的经验来看,这块的耗时可能发生在哪里?是否有其他方法来提高性能?
    谢谢:)

  152. 老赵
    admin
    链接

    老赵 2008-02-19 03:33:00

    @114411
    其实技术进步不能成为变懒的理由吧,这至少有相当部分是开发人员自身的责任。至于我说数据库是web应用的瓶颈,肯定是建立在正确开发的基础上,任何技术想要乱搞都没有办法能做好,呵呵。
    至于你说的场景,建议你使用Fiddler配合IIS日志或自己写诊断代码来察看这究竟是耗时在客户端还是服务器端还是数据传输上。
    如果是服务器端耗时长那么估计卡在数据库上了;如果是客户端耗时长(僵死)则说明需要简化客户端结构;如果是数据传输耗时长那么估计是传递太多ViewState了,那么使用AJAX技术来提交更新的内容,而不要所有数据一起提交。还有就是,如果是第二点(客户端僵死)也可以使用AJAX来操作。IE在POST大量数据时会卡住,IE6在这方面最严重。

  153. 114411[未注册用户]
    *.*.*.*
    链接

    114411[未注册用户] 2008-02-20 04:46:00

    @Jeffrey Zhao
    先谢谢了,如果客户实在受不了了,我会从这几方面去查一下的:)

    呵呵,如果像你说的那样,那么瓶颈应该是在获取数据上了,不过那样和用哪类应用就没关系了,用CS也快不了多少..XD,不扯皮了,我估计你说这段话可能是为了强调应在哪些方面做优化吧.

  154. 老赵
    admin
    链接

    老赵 2008-02-20 09:53:00

    @114411
    优化肯定要针对瓶颈才有效咯

  155. 小瑞22[未注册用户]
    *.*.*.*
    链接

    小瑞22[未注册用户] 2008-03-27 20:24:00

    对于开发企业应用,传统webform下可以方便的服用业务逻辑组建(ascx形式),业务逻辑组件开放给外部调用的部分,可以有属性,可以有方法和事件。属性和方法都是外部主动调用这个没什么好说的了,在asp.net mvc里头肯定可以很好的工作,关键是事件部分,这个很重要,我的组建需要产生某些业务事件,然后外部容器可以订阅并相应此事件,mvc里实现怎么做呢?
    对于asp.net mvc里头模块的重用,你有什么好意见?

  156. 小瑞22[未注册用户]
    *.*.*.*
    链接

    小瑞22[未注册用户] 2008-03-27 20:46:00

    老赵,在我看来,dataset很多地方还是比ilist<T>这种领域模型来的好,虽然我也用领域模型。
    第一:对ilist集合做排序,查询等,要用linq,这玩意我使用的感觉就是效率低,同样绑定一个树,在内存里的速度,还是dataset快。
    第二:很多业务系统字段是可扩展的,或者说是动态变化的。比如Crm系统,客户不同,行业不同,字段差异很大。这就需要元数据定义描述客户化动态定制字段。这时候,领域模型的强类型反而成了死类型。尤其是c#这种静态语言。

  157. 老赵
    admin
    链接

    老赵 2008-03-27 22:19:00

    @小瑞22
    asp.net mvc里一般不会用到事件,事件是WebForms的东西,呵呵。

  158. 老赵
    admin
    链接

    老赵 2008-03-27 22:21:00

    @小瑞22
    您要的其实不是DataSet,而是一个可扩展的集合,其实这个东西也是根据领域需要而编辑的对象模型。
    至于linq的性能,尤其是内存中的查询操作,其实一般来说不会比自己写的差,至于性能,一个应用程序的性能瓶颈几乎不太可能会在这方面。

  159. 小瑞22[未注册用户]
    *.*.*.*
    链接

    小瑞22[未注册用户] 2008-04-01 09:17:00

    我说的主要是指自定义业务事件,比如订单ascx,可能我是从windows开发转过来的原因,我认为组建的横向切割也很重要,订单插入完毕这种事件,如果在mvc里实现不了,确实有点遗憾,这对于复杂逻辑拆分是不利的。因为企业里业务系统逻辑是很复杂的,只有充分的把大机器拆卸成零件各负其职,才有利于分工和调试。即使每个小零件都是有自己的m,v,c。当然mvc这种纵向的分离也很重要,两个角度而已。
    --------------------------------------------------------------
    对于dataset的资源占用,光是听人说比较巨大,没有概念到底多占资源。所以还是宁可信其有了。不过在web中一次查询的数据不会太大,几本是分页过的。
    目前我在项目中,都是在实体的祖先类里实现索引器来实现字段的动态扩展。或者用动态编译?这个我没试过。
    不过感觉业务系统中这种动态的字段定义方案很需要的,不过讨论的人很少。
    当初学.net,真喜欢dataset,除了体积大点,好像真没什么毛病了呵呵。还是有点感情的。:)

  160. 小瑞22[未注册用户]
    *.*.*.*
    链接

    小瑞22[未注册用户] 2008-04-01 09:31:00

    to :114411
    Web应用瓶颈,主要在数据库上,我也这么认为。
    比如你绑个树,你一次性取所有的data,然后在内存里操作这些节点插入,跟你一个一个节点去数据库里select,完全不是一个数量级的速度。
    当然其他因素也很多,但是瓶颈还是在db访问。
    你用windows和web比这个不客观。
    http请求本身就是一个复杂而缓慢的动作,这个响应的回合占用了大部分时间,
    对于普通页面,页面大一点,小一点,对于web都是差不多时间的。就算你放个空页,那速度能跟winfom比么。

  161. 老赵
    admin
    链接

    老赵 2008-04-01 11:37:00

    @小瑞22
    我并不是指DataSet占用资源多,我只是从领域设计的角度来讲的。

  162. Lowkey
    *.*.*.*
    链接

    Lowkey 2008-06-02 18:08:00

    馒头和面包都好吃!我都爱~
    做企业开发我肯定是使用WebForm。Java也不搞出个什么JSF出来了吗?

    PS:关注asp.net MVC的朋友。也来关心一下Promesh.net 吧。Activa的写的MVC真的很精致。

  163. 起名太麻烦就这么地吧
    *.*.*.*
    链接

    起名太麻烦就这么地吧 2008-08-26 09:56:00

    我有一个问题,如果是自定义控件,当页面回发后,我需要记录该自定义空间的状态,如果不用Session,那需要使用什么呢?

  164. tc123[未注册用户]
    *.*.*.*
    链接

    tc123[未注册用户] 2009-04-09 13:54:00

    请问禁用Seesion的话,像当前用户信息这种所有页面公用数据如果保存呢?用cookie吗?我们系统里用户信息是个实体里面有蛮多属性

  165. 老赵
    admin
    链接

    老赵 2009-04-09 16:31:00

    @tc123
    方法很多阿
    url上带着,cookie,要得时候再去取等等。

  166. tianxd
    *.*.*.*
    链接

    tianxd 2009-04-24 17:01:00

    累啊

  167. 麦舒
    *.*.*.*
    链接

    麦舒 2009-07-21 18:22:00

    老赵,非常期待你关于 WebForm 的可测试性文章,我发现在 WebForm 做单元测试很麻烦,特别是用了事件的页面。

  168. Henry Liang unsigned in[未注册用户…
    *.*.*.*
    链接

    Henry Liang unsigned in[未注册用户] 2009-07-22 00:04:00

    @麦舒
    ASP.Net MVC, test friendly!

  169. jerryzuo[未注册用户]
    *.*.*.*
    链接

    jerryzuo[未注册用户] 2009-08-12 10:33:00

    看着你们的 讨论 是你们见少了 还是怎么滴
    现在 主流 啥时候成PHP了? 无语了都,去查统计数据,摆脱 都是老鸟了。还这么 无聊。

  170. cokkiy_[未注册用户]
    *.*.*.*
    链接

    cokkiy_[未注册用户] 2009-12-08 12:03:00

    jerryzuo:
    看着你们的 讨论 是你们见少了 还是怎么滴
    现在 主流 啥时候成PHP了? 无语了都,去查统计数据,摆脱 都是老鸟了。还这么 无聊。


    这还不是某些媒体鼓噪的结果

  171. 链接

    xiangzhuyuan 2010-11-16 21:26:11

    看齐!学习!

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我