yAspectF,轻量级的aop编入分离阻断实现

介绍一下AspectF这个东西,诞生于一位微软mvp之手,介绍它首先要从c#说起,当引入了委托这个概念的时候,它也只是c++的函数指针的封装而 已,但是后续陆续引入的lambda表达式,匿名方法,泛型,扩展方法语法糖,让其一次又一次的升华,一切都是如此美妙,可以说如果我把泛型的封装再做上 去,这个框架基本就可以代表近期c#的新特征的一个集合.在不用反射或者编译优化,这些解释器的手段,可以说c#应该是最好,抽象程度最高的高级语言了 (如果用的话就是java好,不过那些都是写生涩的技术,所以java的企业级框架,如此的强大)
public class AspectF
{//泛型的封装太麻烦,而且暂时用不到,故只根据需要做个string的
//在AspectF上加入了前阻断,并修改返回值,你要抛错也是行的
    public delegate string yson(string i);
    public delegate string yDelegate(yson work,string i);
    public yDelegate yChain = null;
    /// <summary>
    /// 如果方面在work前面返回值了不是null的值,那么阻断,后面的话
    /// </summary>
    [DebuggerStepThrough]
    public AspectF yCombine(yDelegate newAspectReturnDelegate)
    {
        if (this.yChain == null)
        {
            this.yChain = newAspectReturnDelegate;
        }
        else
        {
            yDelegate existingChain = this.yChain;
            yDelegate callAnother = (work,i) =>
                existingChain((ii) => newAspectReturnDelegate(work,ii),i);
            this.yChain = callAnother;
        }
        return this;
    }
    [DebuggerStepThrough]
    public string yReturn(Func<string> work)
    {
        if (this.yChain == null)
        {
            return work();
        }
        else
        {
            var returnValue = string.Empty;
            this.yChain((i) =>
            {//每个yDelegate的匿名方法参数都再执行一次自己的work委托,同时加一个标识,说明是后执行,那么就不在执行这里的work委托,
那么后修改返回值就出来了,而委托链之间,直接用它们自己的返回值了递归传获得的执行结果,由里到外的获得结果,用来调用,比如work("根据返回值后修改",代表执行后的常量)
                if (i != null) {//判定泛型封装用define(T)
                    returnValue = i;
                    return returnValue;
                }  
                returnValue= work();//执行这个
                return returnValue;
            },null);//泛型的话,这里传入define(T)即可
            return returnValue;
        }
    }
}
   class Program
    {
        static void Main(string[] args)
        {

Console.WriteLine("最后返回"+saaddsad());   
        }
        public static string saaddsad() {
            return AspectF.Define
        .aPointer()
        .bPointer()
        .yReturn(() =>
        {
            var ddd="执行方法";
            Console.WriteLine(ddd);
            return ddd;
        });
        }
     }
    static class AspectFExt
    {//语法糖的扩展类,怎么用不到呢?好像只能系统的?
        public static AspectF aPointer(this AspectF aspect)
        {
       
            return aspect.yCombine((work,i) =>
            {
                 Console.WriteLine("a切点前");     
                string a= work("截断改变");          
                 Console.WriteLine("a切点后"+a);
                 work("a");
                return "da";
            });
        }
        public static AspectF bPointer(this AspectF aspect)
        {
       //一个需要(func<string>)的方法,判断如果work指向底层,就执行一个空的
            return aspect.yCombine((work,i) =>
            {               
                Console.WriteLine("b切点前");
                string b = work(i);//不想改变就返回i参数即可,不要使用null
                Console.WriteLine("b切点后"+b);
                return "fsa";
            });
        }
    }

能实现执行后获得返回值,然后改变,执行前改变,泛型封装的话,委托和匿名方法的约束写起来估计是比较烦的,也还有点小问题.,项目就用到前阻断,并改变
返回值,那就这样吧,其实只要再执行一个work,然后给一个标识,就能实现后阻断,然后根据返回值再修改并传递,修改一下yReturn方法就行了.小
型项目就不需要去借助企业框架,虽然编入的方式只能手动,不过效率是大型框架不能比的
如果我也能就钻研一门语言,专心做一门学问,或者一项工艺,无疑是幸福的吧,有一天一定要把你们全部画出来.也许最近的伤感就是项目的后台要做完了,分离的日子越来越近了..C#不舍得啊..但是js又在等着我.我依然前行,因为有很多未知的奇迹在等着我.

时间: 2024-11-08 21:23:30

yAspectF,轻量级的aop编入分离阻断实现的相关文章

使用dynamic和MEF实现轻量级的AOP组件 ---- 系列文章

.NET 4 实践 - 使用dynamic 和MEF实现轻量级的AOP组件(1) .NET 4 实践 - 使用dynamic和MEF实现轻量级的AOP组件 (2) .NET 4 实践 - 使用dynamic和MEF实现轻量级的AOP组件 (3) .NET 4 实践 - 使用dynamic和MEF实现轻量级的AOP组件 (4) 出处:https://www.cnblogs.com/niceWk/tag/MEF/ 原文地址:https://www.cnblogs.com/mq0036/p/10250

AOP

AOP 编辑删除转载 2015-12-08 16:14:27 标签:aop日志系能分析 C++11实现一个轻量级的AOP框架 AOP介绍 AOP(Aspect-Oriented Programming,面向方面编程),可以解决面向对象编程中的一些问题,是OOP的一种有益补充.面向对象编程中的继承是一种从上而下的关系,不适 合定义从左到右的横向关系,如果继承体系中的很多无关联的对象都有一些公共行为,这些公共行为可能分散在不同的组件.不同的对象之中,通过继承方式提取这 些公共行为就不太合适了.使用A

依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)

依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦.所谓横切关注点,即影响应用多处的功能,这些功能各个应用模块都需要,但又不是其主要关注点,常见的横切关注点有日志.事务和安全等. 将横切关注点抽离形成独立的类,即形成了切面.切面主要由切点和通知构成,通知定义了切面是什么,以及何时执行何种操作:切点定义了在何处执行通知定义的操作. http://ju.outofmemory.cn/entry/216839 引子: AOP(面向方面编程:Asp

2015第24周五Spring的AOP

AOP(面向方面编程:Aspect Oriented Programing)和IoC一样是Spring容器的内核,声明式事务的功能在此基础上开花结果.但AOP的应用场合是受限的,它一般只适合于那些具有横切逻辑的应用场合:如性能监测.访问控制.事务管理以及日志记录. AOP相关重要术语: 连接点(Joinpoint) 程序执行的某个特定位置:如类开始初始化前.类初始化后.类某个方法调用前.调用后.方法抛出异常后.一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就称为“连接点”.

AOP技术应用和研究

面向切面编程(Aspect-Oriented Programming,简称AOP)是一种新的软件丌发技术,它是针对面向对象编程(Object.Oriented Programming,简称oop)在处理横跨多个模块的非核心需求时所表现出来的不足而提出的. AOP技术应用和研究系列,首先分析了面向对象编程(OOP)的优点和缺点,从而引出AOP技术.并介绍AOP的基本思想和基本概念.并通过对AOP语言的介绍和实现的研究(特别是Spring AOP框架的实现的分析),进一步深入的分析了AOP的思想.最

Spring AOP潜入易懂的讲解

为什么会有面向切面编程(AOP),我们知道Java是一个面向对象(OOP)的语言,但它有一些弊端,比如当我们需要为多个不具有继承关系的对象引入一个公共行为,例如日志,权限验证,事务等功能时,只能在每个对象里引用公共行为,这样做不便于维护,而且有大量重复代码.AOP的出现弥补了OOP的这点不足. 为了阐述清楚Spring AOP,我们从将以下方面进行讨论: 1.代理模式. 2.静态代理原理及实践. 3.动态代理原理及实践. 4.Spring AOP原理及实战. 1.代理模式 代理模式:为其他对象提

Spring AOP概述

编程语言的终极目标就是能以更自然.更灵活的方式模拟世界,从原始机器语言到过程语言再到面向对象语言,编程语言一步步地用更自然.更灵活的方式编写软件.AOP 是软件开发思想发展到一定阶段的产物,但 AOP 的出现并不是要完全替代 OOP,而仅作为 OOP 的有益补充.虽然 AOP 作为一项编程技术已经有多年的历史,但长时间停留在学术领域,直到近几年,AOP 才作为一项真正的实用技术在应用领域开疆拓土.需要指出的是,AOP 是有特定的应用场合的,它只适合那些具有横切逻辑的应用场合,如性能监测.访问控制

SaaS系列介绍之十四: SaaS软件开发分析

1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力                     ________B.F.Skinner<计算机科学> SaaS模式不同于传统软件不仅仅体现在运营的服务上,同时在软件开发的方式和技术上也有很大的不同. 如何开发SaaS软件,开发SaaS软件将用到哪些技术这都是我们要研究的主要内容. 2 实现SaaS软件的关键技术 l SOA技术 SOA与SaaS被被称作挛生姐妹确实并不为过,SOA与SaaS是现代软件服务领域的二架马车,它们奔蹄狂

会话EJB系列(五)拦截器

上一篇文章<会话EJB系列(四)SessionBean事务管理>中,我们介绍了SessionBean的事务管理机制. 本文主题'拦截器',详细介绍其用途.作用.与Spring框架AOP的对比,并介绍其初步用法. 一.简介 企业级应用中经常面对的事务管理.安全检查.缓存.对象池管理等,为此Spring框架提供了AOP方式,灵活控制业务方法!而EJB3没有提供AOP支持,那么他又是如何应对的呢? JavaEE规范中提供的横切性服务:事务管理和安全检查. EJB容器实现JavaEE规范 用CMT解决