简单生活 发表于 2015-1-18 11:29:43

ASP.NET网站制作之对.net事务的意见仓酷云

有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到net网页编程编译器那么简易。1、事务的实质
事务是软件体系里的两个子体系之间,大概两个模块之间,大概两个对象之间发送动静,并处置动静的历程。在面向对象的天下里,就能够一致以为是两个对象之间的举动。
两个对象之间发送的这类动静,对发送方来说是发生一个事务,对承受方来说是必要处置某个事务。这类动静能够是用户操纵发生的大概软件体系里的某个对象发生的。

<br>对象之间的事务处置
从上图可见,对象一发生一个事务,这个事务产生今后必要对象二实行某种举措。这就是事务机制。对象一是事务的发生者,大概发送者;对象二是事务的吸收者大概定阅者。对象一发生某种动静,必要对象二呼应并处置这给动静,这就是事务的实质。
以往的良多软件体系都在接纳事务机制处置良多成绩。比方从最实质的盘算机系统中的软中止处置,到masm中的jump,到c/c++中的回调函数等等。只不外越初级的软件体系处置事务大概其供应的良多处置办法越靠近人的头脑,而越阔别呆板头脑。构建软件体系的办法从实质上就是从呆板头脑走向人的头脑的历程。
2、事务机制的优点
1、间接挪用
接纳事务机制有甚么优点?事务发送者为何不间接挪用事务承受者供应的处置函数呢?

<br>挪用机制
假如所示,两个对象之间的挪用机制。对象B挪用对象A的办法,能够经由过程函数指针大概跳转(汇编言语)等完成。这类办法酿成的了局是A和B的严密耦合,即B对A有很强的依附性。能够当作B是事务的公布者,A是事务的呼应和处置者。不外这类机制用事务机制注释从实际上就对照牵强了。统一种事物,实在现的头脑纷歧样。
如今假定有个对象C也要呼应B的事务。那末,依照下面的这类机制,需求修正对象B的代码,挪用对象C的办法。如许机打造成了十分强的依附干系。代码的修正和扩大十分贫苦。假如对象越多,这类干系越多,全部体系越庞大。假如一个体系内里对象良多,这类依附干系也良多的情形下,这类挪用干系就会非常庞大,对体系的强健性和优秀性会形成影响。
2、回调机制
假如依照c#的托付头脑,B必要事前供应对事务处置函数的某些回调指针。如许,别的对象,比方A和C就往修正它的回调指针,把本人的办法接洽到下面。可是它们之间的耦合干系就比下面复杂了。

<br>回调机制
回调机制的头脑已对照靠近托付的观点。实在托付在实质上也就和回调指针差未几,只是观点上加倍初级。对象B作为事务的公布者,事前界说一些回调函数指针,然后在当地符合的中央挪用这些指针指向的函数。而事务定阅者大概处置者A和C所作的就是让给这些空指针赋值,把本人的事务处置办法赋给它,从而完成B挪用A和C的办法。
在C或C++中与托付最为类似的是函数指针。但是,函数指针只能援用静态函数,而托付能够援用静态办法和实例办法。当托付援用实例办法时,托付不但存储对办法出口点的援用,还存储对为其挪用该办法的类实例的援用。与函数指针分歧,托付是面向对象、范例平安而且平安的。
3、事务机制的完成
1、托付的范围
假如纯真用托付,关于事务的公布者B来讲,假定它公布事务e,关于事务e,它今朝已晓得有A和C对象必要定阅这个事务。以是,它就声名两个托付对象援用(实质上相似于函数指针),然后让A和C对象来接纳相似回调的机制定阅和呼应事务。
假如厥后,有个对象D也必要定阅B的事务e,它怎样办呢?一种情形是D修正B的一个托付对象援用,把本人的处置办法包装成一个托付对象付给它。如许,D就争夺了A大概C的定阅。不然,就必要修正B的代码,增加一个相似的托付对象援用,以便让D来利用。
如许做的成果是事务公布者B必要声名良多托付对象的援用变量。了局是弄得代码保护对照凌乱,而且利用者也良多,依附干系也不简单弄分明,简单产生毛病。
2、事务的引进
有了托付,就供应了相似回调一样的功效。可是,回调机制必要事务公布者和事务定阅者两边的配合介入和勉力。也就是,每增添一个定阅者,那末公布者对象就必要供应一个托付援用,让定阅者挂钩。
假如事务的公布者公布一个事务今后就不在体贴谁来定阅它,那末今后的处置就交给了利用者,而公布者不再体贴事务处置者的成绩。

<br>定阅机制
C#事务的事务就是这类定阅机制,真实的定阅。公布者不必要体贴定阅者。
C#事务给定阅者供应了对事务呼应的注册和反注册功效。定阅和打消完整是事务承受方的举动。
C#事务机制的完成包含以下几步:
1、事务公布者界说一个托付范例;
2、事务公布者界说一个事务,而且联系关系到已界说的托付上。
3、事务定阅者必要发生一个托付实例,并把它增加到托付列表。
以是,事务event能够当作是一个事务列表,定阅者能够注册和打消本人的呼应和处置机制,可是它没有举措变动全部列表(准绳上)。以是,供应了更强、更平安的体例。
4、事务机制的代码实例

<br>使用程序布局图
如图所示,事务公布对象公布一个事务;事务定阅对象定阅和处置该事务。
usingSystem;
namespaceEventExample
{
///<summary>
///MainClass:主使用程序类
///</summary>
classMainClass
{
///<summary>
///使用程序的主出口点。
///</summary>

staticvoidMain(string[]args)
{
EventPublisherpublisher=newEventPublisher();
EventReader1reader1=newEventReader1(publisher);
EventReader2reader2=newEventReader2(publisher);
publisher.DoSomthing();
Console.WriteLine("Thisprogramalreadyfinished!");
Console.ReadLine();
}
}
///<summary>
///EventPublisher:事务的公布者。
///</summary>
publicclassEventPublisher
{
//第一步是声名托付
publicdelegateintsampleEventDelegate(stringmessageInfo);
//第二步是声名与上述托付相干的事务
publiceventsampleEventDelegatesampleEvent;
publicEventPublisher()
{
}
publicvoidDoSomthing()
{
/*...*/
//引发事务
if(this.sampleEvent!=null)
{
this.sampleEvent("helloworld!");
}
/*...*/
}
}
///<summary>
///EventReader1:事务的定阅者1。
///</summary>
publicclassEventReader1
{
publicEventReader1(EventPublisherpublisher)
{
publisher.sampleEvent+=
newEventExample.EventPublisher.sampleEventDelegate(ResponseEvent);
}
privateintResponseEvent(stringmsg)
{
Console.WriteLine(msg+"---Thisisfromreader1");
return0;
}
}
///<summary>
///EventReader2:事务的定阅者2。
///</summary>
publicclassEventReader2
{
publicEventReader2(EventPublisherpublisher)
{
publisher.sampleEvent+=
newEventExample.EventPublisher.sampleEventDelegate(ResponseEvent);
publisher.sampleEvent+=
newEventExample.EventPublisher.sampleEventDelegate(ResponseEvent);
}
privateintResponseEvent(stringmsg)
{
Console.WriteLine(msg+"---Thisisfromreader2");
Console.WriteLine("Please:downenterkey!");
Console.ReadLine();
Console.WriteLine("ok");
return0;
}
}
}

<br>程序运转了局
总结:事务公布者公布的事务在本色上能够当作对外供应的回调函数指针列表。这个列表的容量能够静态增加。事务定阅者能够把本人的事务注册到这个列表大概打消注册,可是它从准绳上没法变动大概对别的定阅者的注册发生影响。事务公布者经由过程两种手腕使得定阅者准确地利用事务机制:一是界说一种delegate托付范例,事务定阅者只能依照这类范例界说事务的处置办法;二是界说与这个托付相干的event对象,使得定阅者只卖力注册和打消本人的处置历程而不克不及随便对他人的处置历程发生影响。
从运转了局和reader2对象把统一个处置办法注册了两次的条件能够看到,关于一个事务,统一个定阅者能够把统一个处置历程注册屡次,而这个办法终极也会被实行屡次。
实行事务定阅列表中办法的按次不克不及被包管;并且,在这里接纳的是同步伐用办法,只要一个呼应函数实行终了,别的函数才会被实行。假如要办法不被堵塞(包含这里的守候用户输出等),就必要接纳异步伐用体例。
来自:对.net事务的意见
听03很多师兄说主讲老师杭城方讲课很差就连旁听也没有去了)

不帅 发表于 2015-1-21 08:31:33

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

小妖女 发表于 2015-1-25 19:41:29

同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。

仓酷云 发表于 2015-1-26 23:45:35

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

金色的骷髅 发表于 2015-2-1 16:30:34

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

透明 发表于 2015-2-4 09:49:17

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。

山那边是海 发表于 2015-2-5 22:12:57

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

灵魂腐蚀 发表于 2015-2-13 21:49:31

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

若天明 发表于 2015-2-23 23:31:34

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

第二个灵魂 发表于 2015-3-6 23:16:43

JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。

再见西城 发表于 2015-3-7 15:45:08

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

飘灵儿 发表于 2015-3-12 16:36:56

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

老尸 发表于 2015-3-20 00:16:56

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

若相依 发表于 2015-4-4 00:24:17

大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
页: [1]
查看完整版本: ASP.NET网站制作之对.net事务的意见仓酷云