zoukankan      html  css  js  c++  java
  • AOP入门

    一 AOP

    Aspect-Oriented Programming(面向方面编程,AOP),如果我们基于面向对象的思想开发软件,一切皆是对象,而对于对象内部则无能为力。AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓 “方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

    二 AOP framework

    http://sourceforge.net/projects/aopnet/

    http://www.postsharp.org/

    http://www.aspectc.org/ 

    三 基于postsharp的实例

    1)参考:http://www.sharpcrafters.com/postsharp/documentation/getting-started 

    2)QuickTraceAttribute.cs

    using System;
    using System.Collections.Generic;
    using System.Text;
    using PostSharp.Aspects;

    namespace Trace
    {
        [Serializable]
        
    public sealed class QuickTraceAttribute : OnMethodBoundaryAspect
        {
            
    private string enteringMessage, leavingMessage;

            
    public override void CompileTimeInitialize(System.Reflection.MethodBase method, AspectInfo aspectInfo)
            {
                
    string methodName = method.DeclaringType.FullName + "." + method.Name;
                
    this.enteringMessage = "Entering " + methodName;
                
    this.leavingMessage = "Leaving " + methodName;
            }

            
    public override void OnEntry(MethodExecutionArgs args)
            {
                System.Diagnostics.Trace.WriteLine( 
    this.enteringMessage);
                System.Diagnostics.Trace.Indent();
            }

            
    public override void OnExit(MethodExecutionArgs args)
            {
                System.Diagnostics.Trace.Unindent();
                System.Diagnostics.Trace.WriteLine( 
    this.leavingMessage );
            }

            
    public override void OnException(MethodExecutionArgs args)
            {
                System.Diagnostics.Trace.Unindent();
                System.Diagnostics.Trace.WriteLine(
    this.leavingMessage + " with exception: " +
                    args.Exception.Message 
    + Environment.NewLine + args.Exception.ToString());
            }
        }
    }

    3)Program.cs

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;

    // apply quick trace attribute to all methods from 'mscorlib' and 'system.threading.*'
    [assembly: Trace.QuickTrace(AttributeTargetAssemblies = "mscorlib", AttributeTargetTypes = "System.Threading.*")]

    namespace Trace
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                System.Diagnostics.Trace.Listeners.Add( 
    new System.Diagnostics.TextWriterTraceListener( Console.Out ) );

                Method1();
            }

            [QuickTrace]
            
    static void Method1()
            {
                Method2();
            }

            [QuickTrace]
            
    static void Method2()
            {
                Method3();
            }

            [QuickTrace]
            
    static void Method3()
            {
                Thread.Sleep( 
    10 );
            }
        }
    }

    4)结果

      

    完!


    作者:iTech
    微信公众号: cicdops
    出处:http://itech.cnblogs.com/
    github:https://github.com/cicdops/cicdops

  • 相关阅读:
    WF4.0 Beta1 自定义跟踪
    WF4.0 Beta1 流程设计器与Activity Designer
    新版本工作流平台的 (二) 权限算法(组织结构部分)
    WF4.0 Beta1 WorkflowInvoker
    WF4.0 基础篇 (十) Collection 集合操作
    WF4.0 基础篇 (十五) TransactionScope 事物容器
    WF4.0 基础篇 (六) 数据的传递 Arguments 参数
    WF4B1 的Procedural Activity 之InvokeMethod , InvokeMethod<T> 使用
    WF4.0 Beta1 异常处理
    WF4.0 Beta1 变量 Variables
  • 原文地址:https://www.cnblogs.com/itech/p/1763793.html
Copyright © 2011-2022 走看看