Spiga

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

2007-12-22 02:22 by Jeffrey Zhao, 12999 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

六、单元测试

Add your comment

169 条回复

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

    记得你CSS也很强,有时间帮忙看两个CSS布局的问题吧,谢谢。
    http://space.cnblogs.com/question/354/" target="_new">http://space.cnblogs.com/question/354/
    http://space.cnblogs.com/question/353/" target="_new">http://space.cnblogs.com/question/353/
    --------------------------------------------------------
    我CSS不太明白的,写的时候也要翻书,目前开发我已经完全把这方面工作交给一个很牛的人了。:)
      回复  引用  查看    
  2. #102楼[楼主] Jeffrey Zhao      2007-12-22 15:51
    --引用--------------------------------------------------
    jt: bz的意思是不是这样:
    绑定一个gridview,rendering, 然后客户端点击delete,服务器端响应事件,执行delete 的sql,然后再绑定,rendering
    这样就不用viewstate了
    不知我理解的对不对
    --------------------------------------------------------
    这样的话虽然页面上没有ViewState了,但是多了一次无谓的查询其实反而性能降低了。我的意思是不用“复杂事件”呵呵。
      回复  引用  查看    
  3. #103楼[楼主] Jeffrey Zhao      2007-12-22 15:53
    --引用--------------------------------------------------
    jt: @Jeffrey Zhao
    50楼的问题能不能回答一下,回复太多你可能没看到,这个贴挺火的:)
    另外bz的意思是不是尽量利用控件的优势,同时避免viewstate等等的劣势
    struts中也有所谓自定义tag,我看和.net的服务器控件也差不多把,在view这层上如何展现数据我看大家都没有特别好的方式
    --------------------------------------------------------
    看到了,不过要一点点回复。:)
    我并非说不用控件的优势(当然放弃了一部分应该有吧,比如微软“演示”时谈到的功能)。
      回复  引用  查看    
  4. #104楼 jt[未注册用户]2007-12-22 15:55
    我的意思是不用“复杂事件”呵呵。
    ------------------

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

      回复  引用    
  5. #105楼[楼主] Jeffrey Zhao      2007-12-22 15:57
    --引用--------------------------------------------------
    Jeffery Huang:
    老赵你好
    比如,假设写了一个简单的DropDownList,可以自动添加一个空选项,并且空选项的显示文本NullToDisplay可以任意设置
    <cc1:CustomDropDownList runat="server" NullToDisplay=“Nothing” />
    如果NullToDisplay不用ViewState而用私有成员变量保存的话,即使我在客户代码中修改了NullToDisplay的值,在呈现时,NullToDisplay还是显示在页面设置的这个初始值Nothing
    --------------------------------------------------------
    不好意思我没有理解您的意思……
      回复  引用  查看    
  6. #106楼 jt[未注册用户]2007-12-22 15:57

    @Jeffrey Zhao
    @Jeffery Huang

    题外话,你们除了名字里有J的谐音,是不是都是 richer的fans啊?:)
      回复  引用    
  7. #107楼[楼主] Jeffrey Zhao      2007-12-22 15:59
    --引用--------------------------------------------------
    jt:
    能不能在具体一点?看不懂,比如一个gridview的增删改怎么办
    --------------------------------------------------------
    如果要用GirdView的增删改的话,我想ViewState的确是必须的。不过我一般总是放弃这些功能,其实一般是放弃GridView的。大部分应用我想不太需要这个吧,GridView只能显示表格,挺没有用的。
      回复  引用  查看    
  8. #108楼 Jeffery Huang      2007-12-22 16:04
    曾经有人没有仔细看我的名字,误认为我是老赵,我都有及时说明,在这里还要给老赵说声抱歉,我不想鱼目混珠,取这个名字完全是个人喜好
      回复  引用  查看    
  9. #109楼 jt[未注册用户]2007-12-22 16:06
    --引用--------------------------------------------------
    Jeffrey Zhao: --引用--------------------------------------------------
    jt:
    能不能在具体一点?看不懂,比如一个gridview的增删改怎么办
    --------------------------------------------------------
    如果要用GirdView的增删改的话,我想ViewState的确是必须的。不过我一般总是放弃这些功能,其实一般是放弃GridView的。大部分应用我想不太需要这个吧,GridView只能显示表格,挺没有用的。
    --------------------------------------------------------

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

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

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

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


      回复  引用    
  10. #110楼 Jeffery Huang      2007-12-22 16:12
    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

    不知道我这样说的清不清楚...
      回复  引用  查看    
  11. #111楼 jt[未注册用户]2007-12-22 16:16
    困扰java的问题比如这种简单的表格控件,在.net根本不是问题(企业环境中那一点viewstate不算什么).困扰.net的问题,如数据库访问到底用什么方式orm,还是dataset等等 在java世界里早已经解决了,两个社区现在是在互相学习,知识在相互流动,不过.net程序员要学的更多一些,基础的成果在java社区那边,.net程序员有点吃亏

      回复  引用    
  12. #112楼[楼主] Jeffrey Zhao      2007-12-22 16:20
    @jt
    MVC还没有提供GridView呢,呵呵。有GirdView我们也可以不用,这丝毫不影响我们使用WebForms,呵呵。
      回复  引用  查看    
  13. #113楼[楼主] Jeffrey Zhao      2007-12-22 16:22
    @Jeffery Huang
    我写过一个组件,能够将这种简单属性自动存放在页面的里,呵呵。
    其实ViewState也是这么做的,因为这是保存状态的唯一办法。
    不过我不介意在页面上保留这样少量字符,因为就算没有ViewState,其他框架也是这么做的,也不会影响性能。
      回复  引用  查看    
  14. #114楼[楼主] Jeffrey Zhao      2007-12-22 16:24
    --引用--------------------------------------------------
    jt: 困扰java的问题比如这种简单的表格控件,在.net根本不是问题(企业环境中那一点viewstate不算什么).困扰.net的问题,如数据库访问到底用什么方式orm,还是dataset等等 在java世界里早已经解决了,两个社区现在是在互相学习,知识在相互流动,不过.net程序员要学的更多一些,基础的成果在java社区那边,.net程序员有点吃亏
    --------------------------------------------------------
    其实.net成果也不少吧,而且很多Java那边的理论也可以用到.NET这边来的。
      回复  引用  查看    
  15. #115楼 jt[未注册用户]2007-12-22 16:25
    我想现在的格局也已经挺清楚了, 个人,小中型的网站用php(python,ror,perl等等),中大型的网站和中小型企业的系统用asp.net,大型企业应用不用说也知道了

    asp.net webform在这个背景下就不是什么问题,100m的带宽如果没有蠕虫应该满足viewstate把,asp.net mvc可能是一种面对广域网的对策
      回复  引用    
  16. #116楼 看客[未注册用户]2007-12-22 16:26
    不论大家怎么讨论
    我还是想说句 webform不好用
    精通html js dom 远比用好webform 容易的多

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

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

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

      回复  引用    
  17. #117楼 kiler      2007-12-22 16:26
    微软要在不推出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能够取得成功。
      回复  引用  查看    
  18. #118楼 volnet(可以叫我大V)      2007-12-22 16:27
    讨论相当激烈~~~~~
    既然存在就一定有存在的理由,只选对的,不选贵的
      回复  引用  查看    
  19. #119楼 kiler      2007-12-22 16:29
    @jt

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

    微软当初要是不放弃asp,把asp包装一下升级为asp mvc,同时推出webform的话就好了,至少可以把以前asp的市场顺利的接下来。
      回复  引用  查看    
  20. #120楼 jt[未注册用户]2007-12-22 16:32
    --引用--------------------------------------------------
    Jeffrey Zhao: @jt
    MVC还没有提供GridView呢,呵呵。有GirdView我们也可以不用,这丝毫不影响我们使用WebForms,呵呵。
    --------------------------------------------------------
    mvc不会提供gridview把,以后做表格很可能用asp的方式,写模板

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

    另外,我觉得你算是一个另类的asp.net程序员:),如果webform的viewstate不用,gridvew不用,"复杂事件"的控件不用,那还叫webform么?或者说webform还剩下多少了? :)
      回复  引用    
  21. #121楼[楼主] Jeffrey Zhao      2007-12-22 16:33
    @jt
    WebForms合理使用,完全可以写出优秀的代码。
      回复  引用  查看    
  22. #122楼[楼主] Jeffrey Zhao      2007-12-22 16:35
    @看客
    我还是想说,没有了ViewState和PostBack,WebForms依然有很大意义。
    我不觉的GMail这种和WebForms有什么关系(换句话说就是没有什么不能实现的),因为GMail用到的大量客户端技术,这个和任何服务器模型无关。
      回复  引用  查看    
  23. #123楼 jt[未注册用户]2007-12-22 16:35
    --引用--------------------------------------------------
    看客: 不论大家怎么讨论
    我还是想说句 webform不好用
    精通html js dom 远比用好webform 容易的多

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

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

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


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

    google就不用说了,这帮家伙骨子里就不服ms,天生一种反叛精神,骂asp.net还来不及呢,还会用webform?
      回复  引用    
  24. #124楼 jt[未注册用户]2007-12-22 16:40
    --引用--------------------------------------------------
    kiler: @jt

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

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

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

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

    asp的淡出,给php整的更火了
      回复  引用    
  25. #125楼[楼主] Jeffrey Zhao      2007-12-22 16:41
    @jt
    MVC的模板怎么写,在WebForms里其实就可以怎么写,ASP.NET MVC不还是用了aspx作为模板吗?
    不过你说到Repeater,我很喜欢这个控件,现在3.5中还有ListView。
    其实即使没有ViewState,没有PostBack,就光拿WebForms的组件模型来说,丰富的控件依然有非常重要的意义。
    比如编写一个控件,随便哪个页面一放,就是一个独立的Tag Cloud,没有用到ViewState,没有用到PostBack,呵呵。
      回复  引用  查看    
  26. #126楼 jt[未注册用户]2007-12-22 16:43
    @jt

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

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

    你说的有道理,google其实不是什么威胁,说白了他除了搜索做的的确牛之外,别的不过都是小程序,javascript玩的比较熟练而已,.如果google没有搜索,其实就没有了品牌号召力,别的业务立马完蛋.很多人喜欢google,只是喜欢这个品牌.有点apple的感觉
      回复  引用    
  27. #127楼 jt[未注册用户]2007-12-22 16:47
    --引用--------------------------------------------------
    Jeffrey Zhao: @jt
    MVC的模板怎么写,在WebForms里其实就可以怎么写,ASP.NET MVC不还是用了aspx作为模板吗?
    不过你说到Repeater,我很喜欢这个控件,现在3.5中还有ListView。
    其实即使没有ViewState,没有PostBack,就光拿WebForms的组件模型来说,丰富的控件依然有非常重要的意义。
    比如编写一个控件,随便哪个页面一放,就是一个独立的Tag Cloud,没有用到ViewState,没有用到PostBack,呵呵。
    --------------------------------------------------------

    实不相瞒,我曾经在后台代码里面直接输出html代码,因为实在看不过一些控件的
    输出,不过调试太麻烦了,后来就不敢造次了:)
      回复  引用    
  28. #128楼 jt[未注册用户]2007-12-22 16:50
    --引用--------------------------------------------------
    Jeffrey Zhao: @jt
    WebForms合理使用,完全可以写出优秀的代码。
    --------------------------------------------------------
    这点我相信,我希望你能多写点这方面的资料,让大家也都借鉴借鉴,我也很想学
      回复  引用    
  29. #129楼[楼主] Jeffrey Zhao      2007-12-22 16:52
    @jt
    我很不喜欢在后台直接写HTML代码,不过我觉得web控件唯一不爽的应该也只是id吧——GirdView这种庞然大物不算。:P
      回复  引用  查看    
  30. #130楼[楼主] Jeffrey Zhao      2007-12-22 16:53
    @jt
    我的建议很简单,其实就是:多用“纯粹”的控件,比如Repeater,呵呵。
      回复  引用  查看    
  31. #131楼 jt[未注册用户]2007-12-22 17:03
    --引用--------------------------------------------------
    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... 你就进套了:)
      回复  引用    
  32. #132楼 kiler      2007-12-22 17:04
    @jt

    DataGrid其实挺好用,但是一点,你要完全完全用面向对象的思想去用他,你会觉得datagird很好很强大的,只要不是对界面要求比较高的话,DataGrid用来显示表格还是很高效的。
      回复  引用  查看    
  33. #133楼 kiler      2007-12-22 17:06
    @jt
    内网的东东还是不少的,也还有不少大的应用,据我所知,石油、银行、海关都有投入生产的大型业务系统使用。
      回复  引用  查看    
  34. #134楼 jt[未注册用户]2007-12-22 17:09
    --引用--------------------------------------------------
    Jeffrey Zhao: @jt
    我很不喜欢在后台直接写HTML代码,不过我觉得web控件唯一不爽的应该也只是id吧——GirdView这种庞然大物不算。:P
    --------------------------------------------------------
    你就是对gridview另眼相看:),你一定要承认你属于asp.net边缘人,呵呵

    大家说了这么多,我觉得其实大家对webform或者说控件拖拉都有感情,从这个角度讲好不好,合不合适都是次要了,大家还是在怀念vb和delphi那个年代把,呵呵,希望silverlight能给我们一个新的经典
      回复  引用    
  35. #135楼 jt[未注册用户]2007-12-22 17:15
    --引用--------------------------------------------------
    kiler: @jt

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

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

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

    与ORM一起配套的,除了datagrid,datalist之类的,还有DynamicData一系列控件
      回复  引用  查看    
  37. #137楼[楼主] Jeffrey Zhao      2007-12-22 17:20
    @jt
    是拖拉控件和这种控件的东西的确在开发上带来了很大遍历啊。
      回复  引用  查看    
  38. #138楼[楼主] Jeffrey Zhao      2007-12-22 17:21
    @kiler
    只是表格在普通Web应用中实在不多见啊,呵呵。
    对了,另外GridView在某些时候样式很难控制,所以……
      回复  引用  查看    
  39. #139楼 jt[未注册用户]2007-12-22 17:22
    或者这么说,你想做一个充血的数据模型时,你发现,和微软提供的东西完全对不上,还要从头实现数据源和模板,从这个意义上说,mvc的出现给你卸下很多包袱,很纯洁的一个view,更自由地选择架构和模型
      回复  引用    
  40. #140楼[楼主] Jeffrey Zhao      2007-12-22 17:23
    @jt
    爱动总是能动,其实Java里的那些基础在.net里都有,说DataSet怎么怎么样,但是.net也有DataReader啊?话说我几乎不用DataSet。
    说我边缘我不知道,但是我的确把很多东西给抛弃了,把它们抛弃之后就会发现,我们其实也不缺什么啊。
      回复  引用  查看    
  41. #141楼[楼主] Jeffrey Zhao      2007-12-22 17:24
    @jt
    WebForms也不是没有纯洁的View。
    其实MVC的特点主要还是在驱动方式,在View这层,其实WebForms和MVC相差不多。
      回复  引用  查看    
  42. #142楼[楼主] Jeffrey Zhao      2007-12-22 17:24
    大家慢聊,我继续写文章去了。:)
      回复  引用  查看    
  43. #143楼 jt[未注册用户]2007-12-22 17:47
    其实我也不用dataset,讨厌它,边缘人不见的不好,有的时候还占到最前端,我想我们很多人是在.net平台上做类似java的事情,而不是利用.net本身提供的东西,这不能不说是.net的悲哀,就像bz说的,.....啊,bz都走了,那改日再聊把:)
      回复  引用    
  44. #144楼 怪怪      2007-12-22 17:56
    @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社区的讨论, 也不是说虚的东西就完全没有讨论的必要, 只是讨论事情要落在问题上, 成天不阴不阳, 这算干嘛呢?
      回复  引用  查看    
  45. #145楼 怪怪      2007-12-22 17:59
    @jt
    驴唇对马嘴是对不上, 问题是这有个驴唇, 你就非对马嘴?
      回复  引用  查看    
  46. #146楼 losingrose      2007-12-22 18:30
    Web的核心需求就是变
    每隔几日就可能会改变需求,所以框架在web领域中是非常难以生存的,广泛流行的大多都是一些脚本程序,web架构,越简单就是越好,简单中融入程序思想提高开发效率,才能做到最好。
    我希望大家都不要太迷信与petshop等框架的思想了,事实表明,他们不适合做web。
      回复  引用  查看    
  47. #147楼 Jeffery Huang      2007-12-22 19:42
    期待下文,希望能给大家一些具体的解决方案或思路,谢谢,呵呵
      回复  引用  查看    
  48. #148楼 lodestar      2007-12-22 20:47
    好,收藏。
      回复  引用  查看    
  49. #149楼 jt[未注册用户]2007-12-22 21:16
    @怪怪
    呵呵,看来对我的评价其实还是不错的,其实我并不是java社区来的:)
    其实你说的大部分挺对,我也赞同,我可没说一定要用gridview,不过java里面没有对应的快速表格控件也是事实,当然了他们也肯定在努力,我的一朋友还做了一个,放到javaeye,大家视如珍宝.

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

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

    另外我觉得你对java社区有敌对情绪,这肯定不对,我也喜欢.net,但我告诉你,.net要想java学的还有很多,或者说相互学习也不可避免
      回复  引用    
  50. #150楼 亚历山大同志      2007-12-22 21:21
    各人有各人的活法,也就各人有各人的爱好,很多时候觉得某个东西好不好并不是这个东西是不是先进,而是使用者自身的学习经历。WebForm和MVC对比起来也不能说谁先进,谁不适合怎么怎么。总的来说WebForm是很先进的概念,不过个人觉得某些方面微软没有搞得很完善(我还是想说那个Page_Load事件,呵呵)但是微软并没有在新版本中没有继续改进WebForm框架,而是弄了个MVC的东东出来,感觉确实........
    不过老赵看不下去了才出来发这个东东还是很沉得住气了。

    个人的看法:用WebForm习惯的就跟着老赵之后的Post提高技巧。习惯MVC的也不用如传道士般的想要全世界的MVC。还是都消停了吧,希望老赵继续把这个系列写下去,我也好学习学习查漏补缺
      回复  引用  查看    
  51. #151楼 bangbang[未注册用户]2007-12-22 22:25
    三、生成HTML不规则,难以进行样式控制

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

    我个人的看法是,一个好的框架,是应该在一定程度上能够规范程序员,也应该尽量避免各种误用问题。webform有其优势,同样也有其劣势。mvc与webform可以说是优势互补的两套东西。
      回复  引用    
  52. #152楼 bangbang[未注册用户]2007-12-22 22:31
    @亚历山大同志你
    对于亚历山大同志说的那个Page_Load,我觉得要修改很,因为要改变Page类的生命周期。现在的asp.net是在页面招待完后,Page类的生命周期就结束了。如果Page_Load变成亚历山大同志希望的那种情况,Page类的生命周期就非常类似于Java的Servlet了,然后就有可能在页面代码里面放入很多的lock语句。
      回复  引用    
  53. #153楼[楼主] Jeffrey Zhao      2007-12-22 22:52
    @亚历山大同志
    我写的东西其实非常简单,看过之后就会发现其实在技术上都是很基础的。
      回复  引用  查看    
  54. #154楼[楼主] Jeffrey Zhao      2007-12-22 22:54
    @bangbang
    WebForms促进了控件开发行业,不知道MVC是如何来对应这一点的。
    毕竟控件的复用大大提高了效率,虽然的确有时候难以控制样式。还有我不知道MVC是不是做到了“能够规范程序员,也应该尽量避免各种误用问题”……
      回复  引用  查看    
  55. #155楼[楼主] Jeffrey Zhao      2007-12-22 22:55
    @bangbang
    请教一下,什么是lock语句?
      回复  引用  查看    
  56. #156楼 jt[未注册用户]2007-12-22 22:59
    如果大家都肯认真钻研, 就Java领域那点小破框架, 几万到几十万行代码, 十来个人合作, 踏踏实实做个1年半载, 加上讨论, 琢磨, 和重构, 是个程序员团队都搞得出来.
    ------------------------
    呵呵,我想你把java社区的知识归结于几个框架,和几位所谓大师身上了把,所以你认为java没什么,只不过是一些人个人崇拜的结果,那你看这个问题可能还没有看到他们后面的学术流的支持,我在查阅文献的时候,发现java社区现在的做法的思想来之已久,java社区整个的知识和学术底蕴恐怕比你想象的深厚得多,让你说的那样,大家不是都成了傻瓜? 那些框架从何而来呢,不掌握其背后的思想的知识的话,只能做仿制品,移植品,.net不学怎么行呢?会永远落后. java的朋友跟我说,全世界都在做java,可只有微软在做.net,这怎么比呢?

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

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

    不是告诉大家不要用.net 了,没前途,转java,呵呵,我图什么啊:P.问题是.net社区必须有人这么说,整个.net社区也要有忧患意识, 不虚心学习哪行,你我这两下子跟人家差的太多了.
      回复  引用    
  57. #157楼 jt[未注册用户]2007-12-22 23:19
    一个.NET程序员完全不必从Java阵营里获取任何营养, 因为那里除了多余的东西已经没有任何营养了! 就如人体合成氨基酸一般, 一些氨基酸属于人体自身能够合成的, 不需从外界获取, Java阵营里的一切都属于这种.
    --------------------------
    java里面的菜鸟也很多,很多人喜欢gc,所以就不学c++了,改学java.觉得好用简单.但是当我们讨论整个java社区的知识的时候,就不能看这些人了,像我刚才说的,从java社区里学习不仅是借鉴一个框架,几个架构,实质上是从学术界里面学习,从全世界的科学家和研究人员的成果中收益.对不起,微软也有学术贡献的,这么说有点对ms不公平,但是少部分把.当然,谈到软件工程这个学科,很大程度上是一种来自实践中的理论和方法论,很难形式化表述用公式推导一些理论,所以有的牛人的言论的确影响了很多人.

    今天为java社区说了不少好话,有人听的觉得刺耳,不过也要说,争做有学术底蕴的开发者而不是技术熟练工当然应该是每个人的要求,和任何技术相比,学术更保值. .net社区在拥有强大的rad开发基础和丰富的资源上,在吸收java社区的优点才是自力更生之道
      回复  引用    
  58. #158楼 bangbang[未注册用户]2007-12-22 23:31
    --引用--------------------------------------------------
    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#里那个用于多线程锁定语句。
    每个框架都有自己的特点,在做某一特定项目的时候,针对于不同的框架,确实有优劣之分,但是这也只是针对于这个项目罢了。
      回复  引用    
  59. #159楼[楼主] Jeffrey Zhao      2007-12-22 23:47
    @jt
    MS也雇佣了一些项目的开发人员,呵呵。
    比如IronPython,比如SubSonic,但是性质的确不同,呵呵。
      回复  引用  查看    
  60. #160楼[楼主] Jeffrey Zhao      2007-12-22 23:50
    @bangbang
    为什么用servlet会需要用lock语句阿?
    // 话说其实我曾经也是个初级的jsp程序员,呵呵……
      回复  引用  查看    
  61. #161楼 bangbang[未注册用户]2007-12-23 00:13
    @Jeffrey Zhao
    --引用--------------------------------------------------
    Jeffrey Zhao: @bangbang
    为什么用servlet会需要用lock语句阿?
    // 话说其实我曾经也是个初级的jsp程序员,呵呵……
    --------------------------------------------------------
    因为多个请求访问同一个servlet的话,其实访问的是同一个对象,所以要有时候需要线程安全的时候,就需要线程同步(java好像是用synchronized)。
      回复  引用    
  62. #162楼[楼主] Jeffrey Zhao      2007-12-23 00:18
    @bangbang
    原来如此,大汗一下。
      回复  引用  查看    
  63. #163楼 jackwang[未注册用户]2007-12-23 01:06
    老赵能否回答一下28楼的问题?谢谢
      回复  引用    
  64. #164楼 游客[未注册用户]2007-12-23 01:23
    说的很好啊!继续关注!
      回复  引用    
  65. #165楼[楼主] Jeffrey Zhao      2007-12-23 02:09
    --引用--------------------------------------------------
    jackwang:
    顺便问一下,我有一个从webservice 返回大量结果的数组,里面是复杂对象,我绑定到gridview上,我想做分页,但是每次调用webservice返回的结果都是不同的,那么当用户访问第二页后,在访问第一页,要想保持第一页数据不变,我除了把数据放到viewstate或者session里,还有别的办法吗?我觉得这两种方法都会有很大的性能损失,希望老赵能给点好的思路,客户不同意修改webservice返回的结果就是随机,因为他有100000条数据,但是每次随机返回1000条,我要对这一千条数据再分页。
    --------------------------------------------------------
    不好意思,回复太多了,一下子看漏了。
    这个WebService很牛,我建议这1000条应该放在服务器缓存(或其他存储设备)里。其实ViewState的缺点在于需要传输太多内容,因此造成了性能问题。
      回复  引用  查看    
  66. #166楼 怪怪      2007-12-23 07:25
    @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从业者出点气罢了). 某些人, 不得不小人之心的去揣测, 一天到晚的瞎蹦达, 是不是属于对某种"优越感"和"自我证明"幼稚的心理需要了. 另外, 如果某一种言辞不是成为了一种想当然的习惯性说法, 只有你一个人说些没头没尾的言论, 又有什么了不起呢?
      回复  引用  查看    
  67. #167楼 魔佛之间      2007-12-23 12:54
    怪怪说得精彩!
    引用:------------------------------------------------
    最反感的一件事, 就是讨论问题的风气和习惯, 这些习惯导致很多讨论最终变成无意义的噪声. 其中最大的噪声, 就是接近于口号的那种.
    -----------------------------------------------------
      回复  引用  查看    
  68. #168楼 jt[未注册用户]2007-12-23 16:35
    @怪怪
    你还真是激动啊:)一下子说了这么多,一时间我都不知道从哪里开始说了.而且也没看清你是攻击面向对象还是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菜鸟比,虚心学习,我表达的这意思有错么?
      回复  引用    
  69. #169楼 怪怪      2007-12-24 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相关的讨论中, 你非要提这种扯皮条的话题, 那么我对你的反感, 难道是毫无道理么?
      回复  引用  查看    
  70. #170楼 怪怪      2007-12-24 00:01
    @Jeffrey Zhao
    对不起啦, 又脏了你的地方.
      回复  引用  查看    
  71. #171楼[楼主] Jeffrey Zhao      2007-12-24 01:04
    --引用--------------------------------------------------
    怪怪: @Jeffrey Zhao
    对不起啦, 又脏了你的地方.
    --------------------------------------------------------
    哪儿脏了,其实我蛮喜欢看你们讨论(争论?)的东西。刚才在整理接下去该怎么写MVC,东西太多最后脑子乱了,于是去你的blog里翻翻文章和讨论,刚回来看看我这边情况怎么样了,呵呵。
      回复  引用  查看    
  72. #172楼 怪怪      2007-12-24 04:34
    内容被禁止显示

    我服了, 我冤枉啊.

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

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

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

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

    我知道了, 是 "蛋药".
      回复  引用  查看    
  73. #173楼 lodestar      2007-12-24 11:37
    微软曾经推出过User Interface Process Application Block,不同于web form的界面层技术,asp.net mvc还没有研究,不知道是否是一回事。应该是适合不同的应用场景吧。
      回复  引用  查看    
  74. #174楼 carysun      2007-12-24 16:46
    怪怪的评论确实很精彩
    真希望你能多写点评论技术的文章
      回复  引用  查看    
  75. #175楼 sheng1[未注册用户]2007-12-24 23:23
    哇,花那么多时间来争吵,有结论吗?还不如回去写的好的东西大家看看,学习下。(:
      回复  引用    
  76. #176楼 txdlf      2008-01-04 11:59
    继续
      回复  引用  查看    
  77. #177楼 黄色期刊万万岁[未注册用户]2008-01-25 00:36
    WebForm适合业务多的企业系统,MVC做Web2.0网站。。

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

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

    包括ASP.NET整个框架,我个人认为ms那帮程序员或设计师们都搞得像一锅粥,如果有谁有能力重写一个新的框架出来我一定顶他个肺!
      回复  引用    
  79. #179楼[楼主] Jeffrey Zhao      2008-01-29 19:19
    @汪江涛
    我觉得asp.net和webforms都很好,很难写出也没有必要写出个新框架了,呵呵。
      回复  引用  查看    
  80. #180楼 时尚地带 [未注册用户]2008-01-30 01:41
    ASP。NET开发东西超级快
      回复  引用    
  81. #181楼 114411[未注册用户]2008-02-18 01:05
     既然Web应用瓶颈大都在数据库访问上....
    -------------------------------------------
    不太认同,如果是这样,似乎WinForm程序速度应该和WebForm差不多了,不过现实中同样的数据库访问代码(访问占比例较小时),不少情况下,两者时间还是要差很多的

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

    另外,深入研究过asp和JavaScript的人, WebForm能实现的功能,他也一定可以实现,反之,进化的再深入,做出来的东东也不一定能尽如人意
      回复  引用    
  82. #182楼[楼主] Jeffrey Zhao      2008-02-18 09:07
    @114411
    web服务器还要加载图片等资源,传输的HTML也是不少的数据,所以对于服务器端来说性能瓶颈主要在数据访问,而对于客户端自然还要涉及到数据传输。如果一个WebForm应用程序和WinForms在访问数据库上差不多的话,那么性能差距就是在数据传输上了。
    像你说的,数据访问自然不是Web应用程序独有的瓶颈,但的确是大多Web应用程序的瓶颈,这其实应该已经算是共识了,呵呵。
    还有不管什么web开发技术,我认为真能称之为掌握的“深入”的话,功能总是能够实现的,如果有人不会用WebForms开发某个东西而会用asp的话,这只可能是他WebForms没有掌握好。不同技术的差距在于难易程度和开发效率——当然这点不觉得asp相对于webforms有什么优势,呵呵。
      回复  引用  查看    
  83. #183楼 114411[未注册用户]2008-02-19 02:29
    嗯,时代总是在进步的,开发工具或是框架之类的演变总是向提高生产力方向发展的,虽然多数(嗯,或者说是一部分)是以损失部分性能为代阶的:).当然,我指的是普通开发,深入的话工具仅仅只是工具而已.
    微软的技术总是越来越容易让人变懒,他不断的封装了低层(或许Java也是如此)的技术,直接从WebForm开始编程的人对有些方面理解的难度反而增加了
    我基本不做B/S方面的开发,但公司的产品是C/S 和B/S都有的,我想啊想,还是没法认同你的那点共识,哈哈,只是语言表述层上的不认同
    权当是侃大山吧.
    另外还有一点B/S技术上的问题想请教一下,有个页面,二三十个自定义输入控件,由一个静态文本框,一个输入框,和一个确定按钮组成,输入框用来修改静态文本框中的值,修改完后,都要点确定按钮,将值保存回去,然后在静态文本框中显示出来,现在的问题是这个操作有时会比较耗时(有时会达到几秒),那客户在使用时经常会要改动七八个地方的值,所以累计就要花半分钟左右了.我个人的意见是先在客户端用javascript实现类似效果,然后整块提交.
    以你的经验来看,这块的耗时可能发生在哪里?是否有其他方法来提高性能?
    谢谢:)
      回复  引用    
  84. #184楼[楼主] Jeffrey Zhao      2008-02-19 03:33
    @114411
    其实技术进步不能成为变懒的理由吧,这至少有相当部分是开发人员自身的责任。至于我说数据库是web应用的瓶颈,肯定是建立在正确开发的基础上,任何技术想要乱搞都没有办法能做好,呵呵。
    至于你说的场景,建议你使用Fiddler配合IIS日志或自己写诊断代码来察看这究竟是耗时在客户端还是服务器端还是数据传输上。
    如果是服务器端耗时长那么估计卡在数据库上了;如果是客户端耗时长(僵死)则说明需要简化客户端结构;如果是数据传输耗时长那么估计是传递太多ViewState了,那么使用AJAX技术来提交更新的内容,而不要所有数据一起提交。还有就是,如果是第二点(客户端僵死)也可以使用AJAX来操作。IE在POST大量数据时会卡住,IE6在这方面最严重。
      回复  引用  查看    
  85. #185楼 114411[未注册用户]2008-02-20 04:46
    @Jeffrey Zhao
    先谢谢了,如果客户实在受不了了,我会从这几方面去查一下的:)

    呵呵,如果像你说的那样,那么瓶颈应该是在获取数据上了,不过那样和用哪类应用就没关系了,用CS也快不了多少..XD,不扯皮了,我估计你说这段话可能是为了强调应在哪些方面做优化吧.
      回复  引用    
  86. #186楼[楼主] Jeffrey Zhao      2008-02-20 09:53
    @114411
    优化肯定要针对瓶颈才有效咯
      回复  引用  查看    
  87. #187楼 小瑞22[未注册用户]2008-03-27 20:24
    对于开发企业应用,传统webform下可以方便的服用业务逻辑组建(ascx形式),业务逻辑组件开放给外部调用的部分,可以有属性,可以有方法和事件。属性和方法都是外部主动调用这个没什么好说的了,在asp.net mvc里头肯定可以很好的工作,关键是事件部分,这个很重要,我的组建需要产生某些业务事件,然后外部容器可以订阅并相应此事件,mvc里实现怎么做呢?
    对于asp.net mvc里头模块的重用,你有什么好意见?
      回复  引用    
  88. #188楼 小瑞22[未注册用户]2008-03-27 20:46
    老赵,在我看来,dataset很多地方还是比ilist<T>这种领域模型来的好,虽然我也用领域模型。
    第一:对ilist集合做排序,查询等,要用linq,这玩意我使用的感觉就是效率低,同样绑定一个树,在内存里的速度,还是dataset快。
    第二:很多业务系统字段是可扩展的,或者说是动态变化的。比如Crm系统,客户不同,行业不同,字段差异很大。这就需要元数据定义描述客户化动态定制字段。这时候,领域模型的强类型反而成了死类型。尤其是c#这种静态语言。

      回复  引用    
  89. #189楼[楼主] Jeffrey Zhao      2008-03-27 22:19
    @小瑞22
    asp.net mvc里一般不会用到事件,事件是WebForms的东西,呵呵。
      回复  引用  查看    
  90. #190楼[楼主] Jeffrey Zhao      2008-03-27 22:21
    @小瑞22
    您要的其实不是DataSet,而是一个可扩展的集合,其实这个东西也是根据领域需要而编辑的对象模型。
    至于linq的性能,尤其是内存中的查询操作,其实一般来说不会比自己写的差,至于性能,一个应用程序的性能瓶颈几乎不太可能会在这方面。
      回复  引用  查看    
  91. #191楼 小瑞22[未注册用户]2008-04-01 09:17
    我说的主要是指自定义业务事件,比如订单ascx,可能我是从windows开发转过来的原因,我认为组建的横向切割也很重要,订单插入完毕这种事件,如果在mvc里实现不了,确实有点遗憾,这对于复杂逻辑拆分是不利的。因为企业里业务系统逻辑是很复杂的,只有充分的把大机器拆卸成零件各负其职,才有利于分工和调试。即使每个小零件都是有自己的m,v,c。当然mvc这种纵向的分离也很重要,两个角度而已。
    --------------------------------------------------------------
    对于dataset的资源占用,光是听人说比较巨大,没有概念到底多占资源。所以还是宁可信其有了。不过在web中一次查询的数据不会太大,几本是分页过的。
    目前我在项目中,都是在实体的祖先类里实现索引器来实现字段的动态扩展。或者用动态编译?这个我没试过。
    不过感觉业务系统中这种动态的字段定义方案很需要的,不过讨论的人很少。
    当初学.net,真喜欢dataset,除了体积大点,好像真没什么毛病了呵呵。还是有点感情的。:)
      回复  引用    
  92. #192楼 小瑞22[未注册用户]2008-04-01 09:31
    to :114411
    Web应用瓶颈,主要在数据库上,我也这么认为。
    比如你绑个树,你一次性取所有的data,然后在内存里操作这些节点插入,跟你一个一个节点去数据库里select,完全不是一个数量级的速度。
    当然其他因素也很多,但是瓶颈还是在db访问。
    你用windows和web比这个不客观。
    http请求本身就是一个复杂而缓慢的动作,这个响应的回合占用了大部分时间,
    对于普通页面,页面大一点,小一点,对于web都是差不多时间的。就算你放个空页,那速度能跟winfom比么。
      回复  引用    
  93. #193楼[楼主] Jeffrey Zhao      2008-04-01 11:37
    @小瑞22
    我并不是指DataSet占用资源多,我只是从领域设计的角度来讲的。
      回复  引用  查看    
  94. #194楼 Lowkey      2008-06-02 18:08
    馒头和面包都好吃!我都爱~
    做企业开发我肯定是使用WebForm。Java也不搞出个什么JSF出来了吗?

    PS:关注asp.net MVC的朋友。也来关心一下Promesh.net 吧。Activa的写的MVC真的很精致。
      回复  引用  查看    
  95. #195楼 起名太麻烦就这么地吧      2008-08-26 09:56
    我有一个问题,如果是自定义控件,当页面回发后,我需要记录该自定义空间的状态,如果不用Session,那需要使用什么呢?
      回复  引用  查看    
  96. #196楼 tc123[未注册用户]2009-04-09 13:54
    请问禁用Seesion的话,像当前用户信息这种所有页面公用数据如果保存呢?用cookie吗?我们系统里用户信息是个实体里面有蛮多属性
      回复  引用    
  97. #197楼[楼主] Jeffrey Zhao      2009-04-09 16:31
    @tc123
    方法很多阿
    url上带着,cookie,要得时候再去取等等。
      回复  引用  查看    
  98. #198楼 tianxd      2009-04-24 17:01
    累啊
      回复  引用  查看    
  99. 评论共2页: 上一页 1 2 



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1009824




相关文章:

相关链接: