技术开发 频道

开源轻量级AOP的实现:项目代码更清晰

        【IT168 技术】为了让项目的代码看起来更干净,需要一个AOP!

  于是就实现了一个非常简单的,非常轻量级,有多轻量级呢?

  实现的AOP叫做Earthworm(蚯蚓,为什么叫这个?因为它小,它会疏通!,项目的本意也是这样,所以就叫这个!),命名空间Earthworm下有8个代码文件,包括4个公开接口,1个公开特性,1个公开的抽象类,2个内部类。所以对外部调用者而言,可见的只有6个,够轻量级了吧!

  先看项目的组成!

一:先从简单的说吧!4个公开的接口:IStopAdvice

///<summary>   
 /// 拦截通知接口   
 ///</summary>  
  public interface IStopAdvice  
  {        ///<summary>       
 /// 是否可以继续方法的执行      
  ///</summary>       
 ///<param name="msg">要执行方法的调用消息</param>       
 ///<returns>如果可以继续执行,返回true,否则为false</returns> 
bool CanContinueMethod(IMethodCallMessage msg);    }   
 //////////////////////////////////////////////////////////////////////////    /**示例   
 /// <summary>   
 /// 检查对象权限,可以在用户进行关键操作的方法前 
   /// 比如btn_DeleteUser_Click方法  
  /// </summary>   
 class CheckPermission : IStopAdvice  
  {       
 /// <summary>      
  /// 检查当前用户的权限      
  /// 如果是管理员则可以继续执行方法       
 /// 否则不能执行       
 /// </summary>       
 /// <param name="msg">要执行方法的调用消息</param>        
/// <returns>是管理员返回true,否则为false</returns>       
 public bool CanContinueMethod(IMethodCallMessage msg)     
   {            if (User.CurrentUser.IsAdministrator)             
   return true;           
 else                
return false;        } 
   }     * */    //////////////////////////////////////////////////////////////////////////

  二:  IBeforeAdvice

 

///<summary>    
/// 前通知接口    
///</summary>  
public interface IBeforeAdvice    {        
///<summary>        
/// 在方法执行前,需要进行的通知      
///</summary>        
///<param name="callMsg">要执行方法的调用消息</param>        
void DoAdvice(IMethodCallMessage callMsg);    
}    
//////////////////////////////////////////////////////////////////////////    /**示例    /// <summary>    
/// 用户登录时间记录对象    
/// </summary>    
class LoginTimeLogger:IBeforeAdvice    {        
/// <summary>        
/// 记录当前用户登录到系统的时间      
/// </summary>      
/// <param name="callMsg">要执行方法的调用消息</param>        
public void DoAdvice(IMethodCallMessage callMsg)        
{
if (callMsg==null)          
{            
return;          
}            
Log.Write(string.Format
(
"用户:{0}于{1}登陆到此系统",
User.CurrentUser.Name, DateTime.Now.ToString()));      
}  
}  
**/

三:IAfterAdvice

///<summary>    
/// 后通知接口    
///</summary>  
public interface IAfterAdvice    {  ///<summary>      
/// 在方法执行后,需要进行的通知      
///</summary>      
///<param name="callMsg">执行完方法的返回消息</param>      
void DoAdvice(IMethodReturnMessage callMsg);    
}  
//////////////////////////////////////////////////////////////////////////    /**示例    
/// <summary>   
 /// 用户登出时间记录 
   /// </summary>   
 class LogoutTimeLogger:IAfterAdvice  
{        
/// <summary>      
  
/// 记录当前用户登出系统的时间      
  
/// </summary>      
/// <param name="callMsg">执行完方法的返回消息</param>        
public void DoAdvice(IMethodReturnMessage callMsg)        
{  
if (callMsg == null)            {              
  return;          
}          
Log.Write(string.Format("用户:{0}于{1}登出此系统", User.CurrentUser.Name, DateTime.Now.ToString()));      
  }    
}    
**/

注释比较齐全就不说了,这三个接口是提供给“通知对象”的!

 

 

0
相关文章