AspectF,one个.NET下超简单的轻量级AOP公司

概要介绍

.NET AspectF AOP解决方案,当然春天。网络AOP功能也很强大非常出色,但这个框架相对来说比较复杂,本篇文章将着重向大家介绍AspectF AOP(方面)的轻量级的框架的使用。纵横比F可以使用一种简单的方式为你的代码添加方面(方面)、方面F、代码将变得干净整洁。你可以在这里获得方面框架相关的支持。

    如果你熟悉面向方面编程(面向方面编程)那么你就应该知道AOP公司能使得代码的编写更干净清晰,可维护性更高。但AOP(.NET)中的实现通常是由第三方框架(Spring.NET)或者硬编码实现,例如通过对伊利诺伊州的操作实现,尽管相比好处大于它带来的复杂性,但是这并不是一个简单的实现AOP公司的解决方案。下面我们先强调以下AOP公司

面向方面编程(AOP)

(方面)是你在编写代码的过程中,出现在代码不同部分里的相同的程序功能片段,例如它可能是一种处理异常的方法,也可以是调用方法时的日志(日志记录)记录,或者是方法执行时间的记录(定时执行)室内设计AOP公司框架的话,那么你将重复的编写这些相同的代码,这使得你的代码难以维护。例如你的业务逻辑层需要进行日志记录,错误处理,执行时间需要记录,那么你的代码很可能是这样:

public bool InsertCustomer(字符串firstName,字符串lastName,int age)
{
记录器。作家。WriteLine(“正在插入客户数据…”);
DateTime开始=DateTime。现在;
尝试
    {
CustomerData数据=新客户数据();
布尔结果=数据。插入(名字、姓氏、年龄、属性);
if(结果==真)
        {
记录器。作家。写入(“成功插入客户数据”
+(DateTime.Now-start)。总秒数+“秒”);
        }
返回结果;
    }
catch(异常x)
    {
调试。WriteLine(x.StackTrace);
记录器。作家。WriteLine(x.StackTrace);
返回false;
    }
}
    上面我们写了一些实际的代码,这个代码片段实现了客户信息的插入操作,同时代码中还有日志记录、异常处理和时间记录的操作,由于这种代码的混合,逻辑上显得很混乱可读性变得很差。但是设想一下,如果要在业务逻辑中添加验证或其它方面的时候,那么随着代码的添加业务逻辑将变得更乱,真是要多乱有多乱。而且当你给程序业务逻辑添加新的方法时,你需要不断的复制粘贴代码,修改这每个业务逻辑层的部分,例如:你需要在业务逻辑中添加一个更新客户同意,同意

    再想象一下,对于修改来说,如果我们的项目需要大范围的修改错误处理的方式,那你就必须把所有业务层的方法一个一个的进行修改。然后如果新的需求又来了,要修改时间统计的方式…这过程真是苦不堪言啊。

    你会说什么

[日志]
[时间执行]
public void InsertCustomerTheCoolway(字符串firstName,字符串lastName,int age)
{
CustomerData数据=新客户数据();
数据。插入(名字、姓氏、年龄、属性);
}
AOP中心记录、计时、验证这些方面从业务代码中进行分离。如上例所示,你可以通过属性解决,这样的代码干净又清晰,这里每一个属性代表一个方面。例如:通过添加登录中方面你可以进行日志记录。总之,无论你用了什么AOP公司框架,它都保证了方面在运行时被编入了你的代码中。

简单的AOP方面

    让我们来了学习一下怎么在.NET AspectF构建C#程序,这个程序将不使用属性“IL”AOP只用简单地调用类和委托就可以了,而且使用这种方式的程序具备了很高的重用性和可维护性,而最重要的是它很轻量级,只是一个简单的类——方面F如下面代码所示,这是纵横比F之于上例的应用:

public void InsertCustomerTheEasyWay(字符串firstName,字符串lastName,int age)

    {

方面F。定义

                .日志(Logger.Writer,“轻松插入客户”)

                .HowLong(Logger.Writer,“Starting customer insert”,“Inserted customer in{1}seconds”)

                .Do(()=>

                        {

CustomerData数据=新客户数据();

数据。插入(名字、姓氏、年龄);

});

     }

    如上述代码所示,可能从写法上大家会觉得有些奇怪,不过这就是纵横比F分析方面F。定义()是个静态方法,它返回了纵横比F这个对象,这个对象是整个框架的核心。而代码中的Log和HowLong就是我们在外部定义的方面,而方法包含的内容就是我们应用这些方面的目标代码,整个代码是从左到右进行方面的调用的,形成了一条方面链。通过纵横比F我们就可以在业务逻辑的外部定义方面的代码了,同时使业务更专注。在上述分析之后大家应该有了一个前期的理解了,之后我们将逐步介绍这些方面是如何进行定义的。

方面如何定义之前,我们先来看看方面F:

(1)AspectF使得方面的定义更清晰,如果使用属性者IL操作,这对用户而言是一个黑盒;

(2)方面可以不用过度考虑性能的损失,因为它只是一个轻量级的类;

    (3)你可以向方面传递参数,而其它框架的AOP公司是不允许这么做的;

(4)AspectF甚至不能称为一个框架,因为它只是一个叫做AspectF方面

如何在你的类中定义方面

    在这部分我们将介绍如何创建自己的方面。首先你先为纵横比F类创建一个扩展方法。例如我们将针对上例创建一个日志缔约方:

公共静态AspectF日志(此AspectF-aspect,TextWriter logWriter,string Message)
{
返回方面。联合收割机(工作)=>
    {
工作();
日志编写器。写入(DateTime.Now.ToUniversalTime())。ToString());
日志编写器。写入('\t');
日志编写器。写入(消息);
日志编写器。写(Environment.NewLine);
    });
}
    首先我们看看参数,纵横比F指的是针对该调用方法的纵横比F对象的本身,而后两个参数则是上例中我们传入的参数。我们再来看看方法内部的结构,你将调用AspectF合并日志内容的委托链中,其实在此部分日志的已经委托给了AspectF、AspectFDo方法被调用后,那么委托链上定义的方面都将按照从左到右的顺序依次执行。另外大家可能都注意到了工作()这个方法调用,工作与行动类型的,它表示的是我们的目标代码,对于上例来说就是客户信息插入的代码片段。 说到这里大家应该有了个比较直观的了解了吧。例子可能有些不全面,但是请大家自行阅读纵横比F的源码和示例,相信会有很大收获的。

总结

AOP公司方面非常熟悉的人在读完本篇文章后会有些争议,因为纵横比F并没有呈现传统的AOP,即AOP在很对教材中的定义的核心是“关注”(concern)和“横切”(cross-cutting),《阿萨托春天》。NET结构2.0中包含的方法拦截,通过通知(通知)AOP纵横比F确实没有进行横截的方法,但是它却实现了将关于”的分离,可以说它具有AOP可靠性,AspectF的主要目标是创建独立的,脱离外部类库的程序,只需要使用纵横比F对象,我们就可以轻松的创建新的方面,使用强类型和构建程序的新特性。

方面F相比框架真的很简单,可能笔者的描述有些一笔带过之嫌,还望见谅多多指点,总之希望大家能喜欢并多多支持,最后祝大家有个好心情!

发布于2010-04-26 11:39 建筑物7 阅中国(3511评论(0编辑 收藏 举报

(笑声)