Lind.DDD.LindAspects方法拦截的介绍

时间:2023-01-08 18:54:18

回到目录

什么是LindAspects

之前写了关于Aspects的文章《Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP》,今天主要在设计思想上进行刨析一下,对缓存拦截器一直没有实现,所以文章了也一直没有发出来,让大家等这么久实在不好意思。LindAspects主要是面向切面编程AOP的一种实现,就像MVC框架里的Filter,Filter会自己注入到了每个Action执行的各个环节里,而我们可以直接实现自己的Filter即可,例如只要是继承ActionFilter,那么你的Filter在Action执行时就可以被动态执行,这种设计就相当于把整个Action横切开来,注入我们需要的代码,这大概念就是面向切面(方面)编程的真谛吧!

LindAspects原理是什么

主要通过Emit实现对方法的重写,这个方法不向Unity.Interception非要是虚方法,咱们的Emit本质上是建立一个新的类型,然后建立一个新的方法,这个方法里再去执行当前被拦截的方法的主体,然后通过主体方法实现的AspectAttribute来控制是在主体执行前注入还是在主体执行之后注入!

配合LindPlugins实现对象的生产

方法的对象如何生产一直是个问题,传统方法是通过IoC去创建对象,而你使用new去生产对象一定是不行的,因为你的拦截器无法注入到实例上,在Lind环境里,一切组件都应该是“插件(LindPlugins)”,它们的注册和生产也是统一的,都是通过LindPlugins来实现,当前再往底层看,Plugins本身也是通过autofac这个ioc容器实现的,呵呵。

两种生产拦截对象的对比

Aspects本身的工厂生产

    [TestMethod]
public void TestMethod1()
{
ITest test = ProxyFactory.CreateProxy(typeof(ITest), typeof(LoggerAspectAttribute)) as ITest;
test.Do();
}

LindPlugins的容器生产

     [TestMethod]
public void AspectCachingGet()
{
var old = PluginManager.Resolve<IAopHelloTest2>();
var result = old.GetData("zz", );
Console.WriteLine(result);
}

LindAspects设计图

aaarticlea/png;base64,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" alt="" />

CachingAspectAttribute在介绍

数据缓存这个东西经常被我们提到,现在很多产品都是异步缓存,就是先生成缓存数据,然后在方法里直接从缓存取即可,而今天大叔说的CachingAspectAttribute是指在方法中进行拦截,缓存添加与读取的动作完成由特性拦截器去做,这样做的好处是把业务逻辑与缓存逻辑分开,解耦你的代码!

     /// <summary>
/// 有返回值的方法拦截动作
/// </summary>
/// <param name="context"></param>
public override object FuncInvoke(InvokeContext context, MethodInfo methodInfo)
{
var paramList = InitParams(context, methodInfo);
var obj = Activator.CreateInstance(methodInfo.ReflectedType);
switch (cachingMethod)
{
case CachingMethod.Get:
#region 读缓存
//redis键名,在put和get时使用
var key = prefix + context.Method.MethodName;
//hashset键名,参数组合
var param = string.Join("_", context.Parameters.Select(i => i.Para));
if (!RedisClient.RedisManager.Instance.GetDatabase().KeyExists(key))
{
var objValue = methodInfo.Invoke(obj, paramList.ToArray());
RedisClient.RedisManager.Instance.GetDatabase().HashSet(key, param, Lind.DDD.Utils.SerializeMemoryHelper.SerializeToJson(objValue));
return objValue;
}
var entity = RedisClient.RedisManager.Instance.GetDatabase().HashGet(key, param);
return Lind.DDD.Utils.SerializeMemoryHelper.DeserializeFromJson<object>(entity.ToString());
#endregion
case CachingMethod.Remove:
case CachingMethod.Put:
#region 缓存失效
var putvalue = methodInfo.Invoke(obj, paramList.ToArray());
RemoveCache(methodInfo);
return putvalue;
#endregion
default:
throw new InvalidOperationException("无效的缓存方式。");
}
}

本缓存特性主要使用redis实现持久化,在key的设计上使用了前缀在方法名及方法参数的规则,存储结构如hashset,在缓存失效上使用了方法的动态触发,我们可以看到,代码中定义了缓存的方式,读,加,移除等,我们可以在具体方法上控制缓存的类型,下面是具体方法的特性注入,代码如下:

  public class AopHello : IAopHelloTest2
{
#region IHello 成员
[CachingAspect(CachingMethod.Get)]
public List<DtoUser> GetData(string title, int age)
{
//读取数据的业务代码
return new Test_Code_FirstEntities().WebManageUsers.Select(i => new DtoUser
{
Id = i.ID,
Name = i.LoginName
}).ToList(); } [CachingAspect(CachingMethod.Remove, "GetData")]
public void AddData(string title)
{
//添加数据的业务代码...
} #endregion
}

从代码中可以看到,业务代码如负责自己的业务,缓存注入只是一个特性标记!这才是大叔希望看到的缓存注入点!

感谢各位的阅读,希望文章给大家一些启发!

回到目录

Lind.DDD.LindAspects方法拦截的介绍的更多相关文章

  1. Lind&period;DDD敏捷领域驱动框架~介绍

    回到占占推荐博客索引 最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要 ...

  2. Lind&period;DDD&period;Caching分布式数据集缓存介绍

    回到目录 戏说当年 大叔原创的分布式数据集缓存在之前的企业级框架里介绍过,大家可以关注<我心中的核心组件(可插拔的AOP)~第二回 缓存拦截器>,而今天主要对Lind.DDD.Cachin ...

  3. Lind&period;DDD&period;Messaging框架通讯组件介绍

    回到目录 大 家好,今天有时间来介绍一下Lind.DDD框架里的消息机制,消息发送这块一般的实现方法是将Email,SMS等集成到一个公用类库里,而本身 Email和SMS没什么关系,它们也不会有什么 ...

  4. Lind&period;DDD&period;UoW~方法回调完成原子化操作

    回到目录 本文来自于实践中的不足 在最近开始过程中,遇到了一个问题,之前设计的工作单元UoW只支持Insert,Update,Delete三种操作,即开发人员可以将以上三种操作同时扔进工作单元,由工作 ...

  5. Lind&period;DDD&period;Aspects通过Plugins实现方法的动态拦截~Lind里的AOP

    回到目录 .Net MVC之所以发展的如些之好,一个很重要原因就是它公开了一组AOP的过滤器,即使用这些过滤器可以方便的拦截controller里的action,并注入我们自己的代码逻辑,向全局的异常 ...

  6. Lind&period;DDD&period;Domain领域模型介绍

    回到目录 Lind.DDD.Domain位于Lind.DDD核心项目中,它主要面向领域实体而设计,由一个IEntity的标识接口,EntityBase基类和N个Entity实体类组成,其中IEntit ...

  7. Lind&period;DDD&period;Repositories&period;EF层介绍

    回到目录 Lind.DDD.Repositories.EF以下简称Repositories.EF,之所以把它从Lind.DDD中拿出来,完全出于可插拔的考虑,让大家都能休会到IoC的魅力,用到哪种方法 ...

  8. Lind&period;DDD&period;Repositories&period;Redis层介绍

    回到目录 之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席 ...

  9. Lind&period;DDD&period;Authorization用户授权介绍

    回到目录 Lind.DDD.Authorization是Lind.DDD框架的组成部分,之所以把它封装到框架里,原因就是它的通用性,几乎在任何一个系统中,都少不了用户授权功能,用户授权对于任何一个系统 ...

随机推荐

  1. 【原创】O2O&comma;你真的知道怎么玩吗?

    自从2011年8月份,O2O的概念被Alex Rampell提出,并且在当年的11月份被引入中国以来,O2O这一概念就好像给久无新意的中国互联网行业,打了一针兴奋剂.O2O这个词也如麦当劳,星巴克这些 ...

  2. nullable&comma;nonnull&comma; null&lowbar;resettable以及&lowbar;Null&lowbar;unspecified的区别和使用

    1.关键字:可以用于属性 方法和返回值参数中 关键字作用:提示作用  告诉开发者属性信息 关键字的目的:迎合swift 强语言,swift必须要指定一个对象是否为空 关键字好处:提高代码规划,减少沟通 ...

  3. 点击自动显示&sol;隐藏DIV代码。&lpar;简单实用)

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 很多时候我们需要将DIV的信息默认为隐藏状态,只有当用户点击时才显示DIV中包含的提示文字.这类效果在互联网上应用得很多,但实现的方 ...

  4. 进程kswapd0与events&sol;0消耗大量CPU的问题

    http://www.nowamagic.net/librarys/veda/detail/2539 今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 ...

  5. Java基础知识强化之多线程笔记06:Lock接口 (区别于Synchronized块)

    1. 简介 我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式 ...

  6. JNI 技术与 Android 应用

    1. 什么是 JNI JNI是Java Native Interface的缩写.从Java 1.1开始,JNI标准成为java平台的一部分,它允许Java和其他语言进行交互.JNI一开始为C和C++而 ...

  7. 多台Mac电脑使用一个apple开发者账号

    直接从已安装好的机器上导出私有密钥的,具体方法如下: Xcode的organizer的IPHONE DEVELOPMENT --->Developer Profile里自带的Export和Imp ...

  8. PMP:2&period;项目运行环境

    事业环境因素(EEF):事业环境因素源于项目外部(往往是企业外部)的环境,是指项目团队不能控制的,将对项目产生影响.限制或指令作用的各种条件. 组织内部的事业环境因素: {     uu组织文化.结构 ...

  9. Java 源代码和 C 源代码的运行区别

    与其他程序的执行方式和编译方式不同. Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性. 请参考下图. https://www.cwi ...

  10. C&num;下编程完成IIS网络App的权限设置

    转自:http://linwx1978.blog.163.com/blog/static/1504106920101104834271/ 以前的日志中转了不少文章,最近听说转文不是好习惯,决定普世一把 ...