再现理想 发表于 2015-1-16 22:47:38

ASP.NET教程之细节决意成败 ASP.NET中的胡蝶效应

那做企业软件是不是最好用J2EE?asp.net  媒介
  ASP.NET的长处我说过良多次了,也就是各个控件自力卖力本人外部的逻辑,这是一个功德情,由于它办理了底本ASP处置逻辑耦合度高的成绩。但是这是必要价值的,那就是引进ASP.NET页面熟命周期,跟着控件的多层嵌套,使用的庞大度增添,我们再次堕入泥潭!
  成绩
  实在这个文章标题我两个月前就写下了,但是一向没想写完它,直到明天我在这个泥潭中泡了几个小时,因而决意先从泥潭中跳出来把文章写完,再跳出来持续办理成绩。成绩是如许的:
  利用MSAJAX1.0Beta2+2.0CTP新建一个项目,同时在Bin中放上Beta2的AjaxControlToolkit.dll。
  扔上一个Accordion,安排几个AccordionPane,设置一下CssClass。
  在Page_Load中利用Page.LoadControl加载一个UserControl,然后增加到页面上。
  接着发明UserControl内的控件没法一般触发事务,堕入泥潭中……
  起首要申明,假如仅仅做第3步谁人UserControl一定一般运作,那意味着成绩出在ScriptManager或Accordion中呈现了成绩。
  注释
  想晓得究竟是甚么出成绩了吗?先听我说说这个ASP.NET页面熟命周期的成绩吧。
  因为性命周期按阶段分别,义务在分歧阶段墨守成规完成,以是我们的每个操纵都是阶段相干的,有些操纵仅能在特定的阶段操纵,有些操纵在分歧阶段实行会招致分歧的了局。固然,MS但愿只管打消这些阶段间的差别,比方让一个操纵在尽量多的阶段中都能实行,而且尽量削减在分歧阶段中操纵激发的分歧了局。但是这不成能完整做到,比方我们都晓得ViewState读写限定为仅能在某些阶段举行,因而依附于ViewState的控件属性也就因而遭到一样的限定。
  控件属性读写受阶段限定,这很好承受,对吧?由于这仅仅是一层依附干系。顺着依附干系推行进来,情形会变得愈来愈庞大,限定的缘故原由埋躲得愈来愈底层,接着我们发明庞大性这一成绩在ASP.NET这类布局优秀的系统中呈现了,而没落这类庞大性的银弹还没被创造。
  作为控件或组件的开辟职员,我们固然有任务打消阶段差别,让下流的开辟职员面临更低的庞大性,并且我们也的确全力往做了。控件的每层封装,都包括着这类勉力,并向上答应尽量低的阶段差别。但是为了让控件看起来复杂易用,我们不成能将这些差别完全地纪录在文档当中,我们实验往坦白细节,控件被层层封装时我们都如许做。底层文档没告知我的差别,我固然也没需要写到这一层的文档上往;底层文档说起了的差别,我全力填补了,即便填补得不太好,也不写到这一层的文档上往。因而文档就仿佛神话传说一样跟着世代相传而改动,终极没有人晓得这个控件依附于某些底层的阶段差别。
  做过控件开辟的人都晓得,偶然候我们必需依据实践情形接纳分歧的体例构建看起来一样的控件。比方最复杂的数据控件城市存在是不是PostBack的构建差别,假如长短PostBack,则必要在DataBind时构建并将数据保留到ViewState,假如是PostBack则依据ViewState间接构建,假如PostBack后又碰到了DataBind则必要扫除本来的构建偏重新依据新数据构建。再庞大一些的控件,还会分步骤构建,默许情形下为了打消利用方的阶段差别,部分构建步骤会尽量靠前到Init时实行,而别的一部分构建步骤则尽量推延到PreRender时实行,两头部分则尽量削减本人的变更以便利用方操纵。但是事变不会那末复杂,利用方的某些操纵(一般是会见某个属性)假如依附于某个构建步骤的完成,因而一旦这些操纵呈现,底本在PreRender才实行的特定构建步骤就要提早实行,当如许的操纵在分歧阶段举行多几回,构建步骤就已散落在页面熟命周期的各阶段。
  构建步骤大概散落于页面熟命周期的各阶段关于控件计划师来讲是一个严格的成绩,这意味着他要包管任何一个构建步骤在任何一个阶段实行都是无差别的,固然这不成能做到,因而又要引进其余机制来削减这类差别,庞大性就此发生了,接上去跟着庞大性的增添控件计划师愈来愈没法确保较低的阶段差别水平,这就到控件利用者遭殃了,假如控件利用者又再把控件封装,而且仍然妄图下降阶段差别水平,那末劫难也就产生了……
  了局
  我花了几个小时在泥潭中泡了几个小时,边泡边写这篇文章,成绩固然已有了局了。
  假如Accordion设置了HeaderCssClass大概ContentCssClass,那就会出成绩,但假如为AccordionPane都加上以上两个属性,又不会有成绩了。如许的情形固然经由过程用Reflector检察这两个类的代码来办理,了局发明Accordion会检测每个AccordionPane是不是有设置这两个属性,假如没有就把AccordionPane的设置为和本人的一样。在AccordionPane被设置时,会挪用this.EnsureChildControls(),这是一个会招致构建步骤提早实行的办法,因而控件构建的按次就改动了,不单单Accordion外部的按次改动了,全部Page的都改动了。因为控件的ID是按按次主动分派的,包含我谁人UserControl,构建按次的改动意味着ID的改动,也就相称于全部控件树都改动了,事务固然不克不及一般触发。
  最初的办理计划固然是为我谁人UserControl指定ID。我花了那末多个小时才发明本人做了件蠢事,一早翻开Trace来看控件树就应当能觉察UniqueID的变更。
  总结
  固然这个成绩看起来不是一个太好的例子,由于一翻开Trace就应当能找到成绩的来历,但实践上它却恰好展现了ASP.NET框架外部的“胡蝶效应(ButterflyEffect)”――跟着庞大度的增添,任何一个渺小的改动城市招致全局上的伟大变更。在计划ASP.NET的时分,MS大概也在想着解耦,在复杂的情形下这器材的确也解耦,但是在庞大的情形下却恰好南辕北辙,这真的是很取笑。
什么叫数据库怎么样?什么意思?你想单学数据库。(其实变成是我问的)

只想知道 发表于 2015-1-19 23:49:09

主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。

蒙在股里 发表于 2015-1-26 05:32:39

ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。

爱飞 发表于 2015-2-4 13:15:46

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

谁可相欹 发表于 2015-2-9 23:23:19

但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。

活着的死人 发表于 2015-2-28 04:48:36

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

海妖 发表于 2015-3-9 21:16:15

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

老尸 发表于 2015-3-17 01:10:25

有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。

简单生活 发表于 2015-3-17 01:10:25

HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.

兰色精灵 发表于 2015-3-23 13:08:42

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
页: [1]
查看完整版本: ASP.NET教程之细节决意成败 ASP.NET中的胡蝶效应