|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
兄弟们,想来你们都看过了昨天的比赛了。我现在的痛苦状跟当时应该差不多。希望本版.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++编程。 |
|