ASP.NET教程之在 ASP.NET 顶用匿名托付复杂摹拟 AOP ...
兄弟们,想来你们都看过了昨天的比赛了。我现在的痛苦状跟当时应该差不多。希望本版.net老师不吝赐教,为小弟这一批迷途的羊羔指一条阳光之道!您也知道:学习技术如果只有一个人摸索,那是一件多么痛苦的事情!还有,如果万辛能得名师或长者指点,那又是多么一件幸福和快乐的事情!asp.net这两天写ASP.NET写晕了,老想偷点懒。因为在背景的代码里几近每一个办法里都要try..catch这么来一遍,感到很啰嗦。又遐想到AOP,但AOP的做法绝对对照庞大,做法也良多。好比用DynamicProxy,Attribute,大概Emit等。我溘然遐想到了C#2.0的新特征匿名托付,以为这个固然丑一点。。。不外实在也能够对照轻量级的复杂摹拟AOP的效果://asp.net内里强迫做一个页面基类的请求是不外分的。。。
publicpartialclassTestLogger:PageBase{
protectedvoidPage_Load(objectsender,EventArgse){
//这个办法完成在页面基类内里,能够往内里完成通用的非常处置,日记逻辑等。
TryDo(
//这个内里干实践的事变
delegate(){
inta=1;
intb=0;
intc=a/b;
},
//这是一个可选的非常处置,假如传送一个null就会爽性疏忽非常
delegate(){
Response.Write("Sorry,产生了一个毛病。");
}
);
}
}
在页面基类内里的完成代码就很复杂了,也能够便利的一致办理。这里我假定仅仅复杂的用log4net来对非常做日记纪录:
usingSystem;
usingSystem.Web.UI;
usinglog4net;
namespaceSomeNamespace{
//界说一个复杂的托付用于传送匿名托付
publicdelegatevoidMyAction();
//界说页面基类
publicclassPageBase:Page{
protectedILoglogger;
//页面基类内里会合处置一切非常处置逻辑
protectedvoidTryDo(MyActiondoHandler,MyActionexceptHandler){
try{
//干点儿实践的事变
doHandler();
}catch(Exceptionex){
//复杂的纪录非常
logger.Error(ex);
//其他一些处置
//。。。
//挪用自界说的非常处置,这里没有回传Exception的详细信息。由于归正没有需要对用户显现了。。。
if(exceptHandler!=null)
exceptHandler();
}
}
protectedoverridevoidOnInit(EventArgse){
//初始化logger.恰好这里GetType()能够取到子类的实践范例
logger=LogManager.GetLogger(this.GetType());
base.OnInit(e);
}
}
}
好了,先写到这里。这只是我的一个复杂设法。目标在轻量级的完成非常或日记的会合办理。固然这个和完全的AOP观点是没法比的,不外话说返来,仿佛今朝在.NET中还没有很完善的AOPframework.
我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
页:
[1]