欢迎来到天天文库
浏览记录
ID:27510845
大小:140.97 KB
页数:9页
时间:2018-12-04
《c#应用aop说明》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C#应用AOP说明NFramework 轻量级ORM框架AOP介绍什么是AOPAOP是aspect-orientedprogramming的简写。AOP的研究逐渐成为热门,有关AOP的描述,在CSDN文章中也有人做了比较周详的描述,也有一些对描述的争论。《aspectjinaction》的描述我认为最为经典,理由是:该书是aspectj研发者的手笔,而aspectj目前也是最成熟AOP的工具之一。 对方法调用的拦截,有人把他作为对AOP的解释,同大多数人相同,我不这样认为。AOP的主要作用是解决对象之间的横向关系,
2、一种正交的错综复杂的关系。传统的OOP不能非常好的或说是非常容易的解决这个问题。这就是AOP有机会得以发扬光大的原因之一。那么AOP是怎么解决这个问题呢?编织(weave),把对象间的相关行为按照特定的规则编织到一起。而前面提到的拦截仅仅是为完成编织而采用的手段。拦截不是目的,编织才是。反过来说,编织不仅仅是拦截,他包括了多种知识和技术。这种编织的过程既能是静态的也能是动态的,就像OOP中的先期绑定和后期绑定。 AOP在c#中的研究比java中的研究要落后好几年。能达到应用级的几乎没有(至少java更有一个aspe
3、ctj,当前版本为1.2)。或许是我孤陋寡闻,网络上能找到的比较知名的恐怕只有loom和aspect#了,说他们还属于试验室的成果一点也不为过。那么是否就是说AOP在c#的实现非常难呢?回答:是,也不是。java和c#的语言特征如此相像(他们有一起的祖先c++)。没有理由说java能实现,而c#不行。那么问题在哪里呢?这是c#的AOP的研究,大多数人坚持的一点是不能修改已有的c#语言规范,只能对c#语言进行扩展。同时产生的程式集(assembly)必须能够被clr调用和执行。另外还要考虑程式的性能。如果ms没有在c
4、#乃至.net中对AOP内建的支持(如目前所做的泛型的扩展),那么难度一定是存在的。 幸运的是,ms并没有完全忽略AOP,在.net的框架类库的设计中,我们能隐隐约约的找到AOP的设计思想(虽然这是ms类库实现者为解决特定的问题而采用的方法)。这也为我们在c#中实现AOP提供了设计思路。AOP的功能及实现关于AOP 在c#中的实现原理说不大清楚,因为MS没有将.NetFramework 开源,虽然传言.NetFramework即将开源。虽然如此,AOP的魅力仍然无法抵挡,例如,在一个复杂而且庞大的系统中,有些模块如
5、日志模块,安全验证模块,它们从功能上来说是独立的模块,而在运用时却会穿插到系统其他的所有模块中。在传统的OOP编程中我们无法避免的在众多地方存在这样的代码: 1Log LogEntity = new Log();2LogEntity.Text = ”…”;3LogEntity.Write();4 这样做的结果是无可避免的耦合,当我们对Log类进行了改动,就只能在整个系统的代码中去找这些代码了,多么可怕的工作量!AOP是怎么解决这个问题的?下面给出转载的一个例子,它同时也告诉我们如何实现AOP。由于篇幅较长,在这里我
6、给出两个链接:http://www.c-sharpcorner.com/UploadFile/raviraj.bhalerao/aop12062005022058AM/aop.aspxhttp://www.cnblogs.com/sleeper520/archive/2008/11/04/1326457.htmlNFramework介绍已经基本了结了AOP的功能及实现,再来看看使用AOP复杂一点的例子,加深对AOP的认识。NFramework是一个轻量级ORM框架,据作者moneystar的描述,它是一个较之IBa
7、tis.NET和NHibernate更为优秀的ORM层框架。以下是作者对NFramework的介绍: NHibernate目前可谓如日中天,许多人都在谈论它,并且也得到了广泛的应用,但在我的项目经历中,即使应用NHibernate这样的好工具也有痛苦的时候,大量的xml文件让我们眼花缭乱,简单易学的HQL语言却又常常不能满足我们的要求。特别是随着系统的复杂性越来越高,再加上人员的流动,最终xml堆积如山,若干事件以后不再有人记得那个xml文件是用来做什么的了。NHibernate本身对SQL的封装做的很好,但或许这
8、也成为了我们的束缚,对于非常复杂的业务问题,我们的调试变得更困难,要在代码与数个xml文件之间不停的查阅以期快速定位问题的所在,这增加了我们的调试难度。 IBatis.NETIBatis.NET考虑到了这种情况,因此它将SQL释放出来,让我们可以一目了然。但同样也存在xml数据量过多的情况。随着系统的不断升级,我们不得不考虑膨胀的xml文件对内存的占用问题。
此文档下载收益归作者所有