愤怒的大鸟 发表于 2015-1-18 11:30:52

ASP.NET网页设计C#事务与托付趣谈仓酷云

不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听)事务与托付仿佛很难以了解,这是由于它们的利用体例与经常使用的编码有很年夜的不同,比方一般编写的都是同步代码,挪用一个范例的办法,会马上呈现办法实行的了局,这是切合逻辑的。但在某些情形中,同步代码一定满意需求,拿大众汽车来打个例如,假如交通控制中央但愿每辆公车抵达一个站点时都发送给本人一个旌旗灯号以便本人可以随时把握交通情况,利用同步代码,公汽对象一定必要挪用控制中央对象,如许就呈现了我们一向不肯意看到的情形:两个范例严密地耦合在一同。既然要别的范例对本人的举动作出反响,亲身挪用其范例的办法仿佛不成制止,在同步代码中,很难制止这类严密的范例挪用干系。
另外一个不同是在一样平常情形下,我们只将属性作为参数传送给办法,而很少会思索将一个办法传送给另外一个办法。
我们丢弃各类C#参考书中桀骜难明的事务与托付观点,假想一个情形来了解事务与托付的利用:有一家IT公司,董事长不但愿本人的雇员在下班工夫玩游戏,但又不成能时时刻刻都盯着每一个雇员,因而,他但愿利用一种新的体例完成监督雇员的效果:假如有雇员违背划定,某个设备或专门的监查职员将主动收回一个动静关照他,董事长只必要在事变产生时举行处置。

因而,这个用例实践上是两品种型——董事长类与雇员类——之间的交互,上面的代码将给读者展现怎样利用托付与事务机制完成这类交互:
起首,我们必要在董事长类与雇员类之间界说一个托付范例,用于传送二者之间的事务,这个范例就是一个监督设备或专门卖力打小呈报的监查职员:
publicdelegatevoidDelegateClassHandle();
界说一个托付的历程相似办法的界说,但它没无方法体。界说托付必定要增加关头字delegate。因为界说托付实践上相称一个类,因而能够在界说类的任何中央界说托付。别的,依据托付的可见性,也能够增加一样平常的会见润色符,如public、private和protected。
托付的前往值范例为void,这并不是暗示托付范例自己带有前往值,该前往值范例是指托付的方针函数范例,即它托付的一个事务处置函数前往值是void范例。
新建一个雇员类Employee,其代码以下:
publicclassEmployee{publiceventDelegateClassHandlePlayGame;publicvoidGames(){if(PlayGame!=null){PlayGame();}}}雇员类Employee代码中界说了一个DelegateClassHandle范例的事务PlayGame,它的界说体例也很特别,起首必需利用关头字event,暗示PlayGame是一个事务,同时还必需声明该事务的托付范例为DelegateClassHandle,行将出处该范例的托付对象卖力关照事务。假如有雇员入手下手玩游戏,它将实行Games办法,而只需该办法一被挪用,就会触发一个事务PlayGame,然后董事长就会收到这个事务的动静——有人在玩游戏了。董事长类代码以下,他有一个办法Notify用于吸收动静:publicclassAdmin{publicvoidNotify(){System.Console.WriteLine("someoneisplayinggame");}}Employee的PlayGame事务怎样与Admin的Notify办法联系关系起来呢?只需经由过程事务绑定便可完成,详细历程以下列代码:Employeeemployee=newEmployee();Adminadmin=newAdmin();employee.PlayGame+=newDelegateClassHandle(admin.Notify);employee.Games();请人人注重事务绑定的代码:employee.PlayGame+=newDelegateClassHandle(admin.Notify);经由过程DelegateClassHandle将两个类的交互举行了绑定,当employee.Games办法挪用后,触发PlayGame事务,而该事务将被托付给admin的Notify办法处置,关照董事长有雇员在下班工夫玩游戏。但董事长其实不满意这类复杂的关照,他还想晓得事实是谁在下班工夫违背划定。明显,如今托付对象必需传送需要的参数才行,这个请求也能够很简单地办到。事务的参数能够设置为任何范例的数据,在.NET框架中,还供应了事务参数基类EventArgs专门用于传送事务数据。从该EventArgs类派生一个自界说的事务参数类CustomeEventArgs,这个范例将照顾雇员姓名和岁数信息:publicclassCustomeEvetnArgs:EventArgs{stringname="";intage=0;publicCustomeEvetnArgs(){}publicstringName{get{returnthis.name;}set{this.name=value;}}publicintAge{get{returnthis.age;}set{this.age=value;}}}修正托付范例DelegateClassHandle的界说,让其照顾需要的参数:publicdelegatevoidDelegateClassHandle(objectsender,CustomeEvetnArgse);雇员类的代码修正后以下:publicclassEmployee{privatestring_name;publicstringName{get{return_name;}set{_name=value;}}privateint_age;publicintAge{get{return_age;}set{_age=value;}}publiceventDelegateClassHandlePlayGame;publicvoidGames(){if(PlayGame!=null){CustomeEvetnArgse=newCustomeEvetnArgs();e.Name=this._name;e.Age=this._age;PlayGame(this,e);}}}在Games办法中,起首新建一个CustomeEventArgs对象,然后设置了需要的属性Name和Age。董事长的关照办法也必需响应地举行修正:publicclassAdmin{publicvoidNotify(objectsender,CustomeEvetnArgse){System.Console.WriteLine(e.Name+"is"+e.Age.ToString());}}将两个范例对象举行联系关系的代码也必要举行响应的修正:Employeeemployee=newEmployee();employee.Name="Mike";employee.Age=25;Adminadmin=newAdmin();employee.PlayGame+=newDelegateClassHandle(admin.Notify);employee.Games();修正后的代码运转的了局是,当Mike挪用Games办法玩游戏时,会主动触发PlayGame事务,而该事务照顾相干信息关照admin,后者的Notify办法将吸收到数据并输入“Mikeis25”,告知董事长是Mike,25岁,正在下班工夫玩游戏。托付是能够多路播送(Mulitcast)的,即一个事务能够托付给多个对象吸收并处置。在下面的用例中,假如有另外一位司理与董事长具有一样的嗜好,也能够让托付对象将雇员的PlayGame事务关照他。起首界说司理类:publicclassManager{publicvoidNotify(objectsender,CustomeEvetnArgse){System.Console.WriteLine(sender.ToString()+"-"+e.Name);}}司理Manager范例的Notify办法与Admin分歧,他也承受到响应的信息。托付的多路播送绑定的办法仍旧是利用+=运算符,其办法以下面的代码所示:Employeeemployee=newEmployee();employee.Name="Mike";employee.Age=25;Adminadmin=newAdmin();Managermanager=newManager();employee.PlayGame+=newDelegateClassHandle(admin.Notify);employee.PlayGame+=newDelegateClassHandle(manager.Notify);employee.Games();实行该办法,读者将看到admin和manager的Notify办法城市被事务关照并挪用实行。经由过程如许的办法,董事长和司理城市晓得Mike在玩游戏了。
假如董事长不但愿司理也收到这个关照,该怎样排除PlayGame对manager的事务绑定呢?一样十分复杂,在employee.Games办法被挪用前实行以下语句便可:
employee.PlayGame-=newDelegateClassHandle(manager.Notify);
最初必要提示读者注重的,Employee类中的Games办法在触发事务PlayGame之前必要判别该事务是不是为null。当employee对象的Games办法触发事务PlayGame后,必需有一个方针函数来处置这个事务,而该语句恰是判别该方针函数是不是存在。假如将这个判别往失落,且对事务不举行任何绑定而间接挪用Games办法,程序将在事务PlayGame处弹出一个NullReferenceException的非常。

读者可以从托付与事务的代码中得出甚么结论吗?两个必要存在挪用干系的范例,在各自的完成中却没有编写实践的挪用代码,它们只是经由过程一个事务和一个第三方的托付范例完成了动静的传送历程。两个范例之间不存在任何的严密耦合,它们看似松懈地经由过程一个托付对象中通讯,完成了本书一向宣扬的“高聚合”和“低耦合”概念。

来自:http://blog.csdn.net/chiangbt/archive/2008/01/17/2050174.aspx
无论谁倒了对双方阵营的粉丝们也是有害无益。

冷月葬花魂 发表于 2015-1-21 09:12:20

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

小妖女 发表于 2015-1-24 12:37:09

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!

飘飘悠悠 发表于 2015-2-1 11:03:47

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

小魔女 发表于 2015-2-4 20:13:24

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

乐观 发表于 2015-2-6 12:58:27

asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源

再见西城 发表于 2015-2-9 15:53:25

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。

蒙在股里 发表于 2015-2-10 08:36:18

最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。

仓酷云 发表于 2015-2-11 00:14:06

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。

灵魂腐蚀 发表于 2015-2-18 16:48:20

能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。

因胸联盟 发表于 2015-2-26 19:06:48

比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。

精灵巫婆 发表于 2015-3-4 03:35:51

平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。

若天明 发表于 2015-3-11 15:57:48

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。

若相依 发表于 2015-3-19 00:00:23

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

只想知道 发表于 2015-3-22 19:10:53

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

山那边是海 发表于 2015-3-22 21:16:47

碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。

透明 发表于 2015-3-24 04:18:16

在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的

再现理想 发表于 2015-4-8 15:13:18

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

愤怒的大鸟 发表于 2015-4-10 06:59:40

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

爱飞 发表于 2015-4-16 06:12:54

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
页: [1]
查看完整版本: ASP.NET网页设计C#事务与托付趣谈仓酷云