今天和大家分享AwesomeProxy.Net小弟开源AOP轻型框架
简单介绍 AOP (Aspect-Oriented Programming)
AOP 是 OOP(物件导向)一个变化程式撰写思想。(非取代OOP而是扩充)
导入AOP帮助:
可帮我们分离核心逻辑跟非核心逻辑代码,很好降低模组间耦合性,已便日后扩充。
非核心逻辑代码像:(日誌记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来)
例如下图:
原本写法把写日誌相关程式写入,业务逻辑方法中。导致此方法非单一职则。我们可以把程式重构改写成(右图),将写日誌方法抽离出来更有效达成模组化。
经典例子:
Asp.Net MVC中Contoller,Action过滤器(FilterAttribute)
AwesomeProxy.Net介绍:
AwesomeProxy.Net 主要是拦截方法处理
方法执行前方法执行后方法异常How to Use:
使用方法类似于Asp.Net MVC中Contoller,Action过滤器
撰写一个标籤(Attribute) 标记拦截动作public class CacheAttribute : AopBaseAttribute{ public string CacheName { get; set; } public override void OnExcuting(ExcuteingContext context) { object cacheObj = CallContext.GetData(CacheName); if (cacheObj != null) { context.Result = cacheObj; } } public override void OnExcuted(ExcutedContext context) { CallContext.SetData(CacheName, context.Result); }}
将要被拦截类别继承于MarshalByRefObject类别public class CacheService : MarshalByRefObject{ [Cache]public string GetCacheDate(){return DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss");}}
由ProxyFactory.GetProxyInstance 动态产生被代理类别CacheService cache = ProxyFactory.GetProxyInstance<CacheService>();
4.直接呼叫方法就可执行标籤上的拦截动作
CacheService cache = ProxyFactory.GetProxyInstance<CacheService>();Console.WriteLine(cache.GetCacheDate());
Simple Code:
撰写Log
权限验证
快取
Unit Test 结果
小结:
使用 AwesomeProxy.Net 和ASP.Net MVC注册Contoller或Action过滤器一样
AOP核心思想就是代理模式。
本篇只先介绍如何使用,后续有时间会再补充代理模式细节!