C# 面向方面的编程框架

C# 面向方面的编程框架,c#,.net,postsharp,C#,.net,Postsharp,与手动操作相比,使用面向方面的编程框架有哪些优势?谢谢。你可以阅读马修·D·格罗夫斯(Matthew D.Groves) 否则的话,我们的头头会不时出现,所以他可能也会出现在这里 AOP的核心是将“交叉关注点”从主要逻辑中分离出来。日志记录、事务管理等都在整个应用程序中使用,但代码并不特定于给定的类,而是重复使用。AOP允许您将这些代码从类中分离出来,并将它们粘贴到其他地方 发件人: } 日志代码与Reverse无关,它会将实际完成工作的代码弄乱。AOP允许您将代码移动到单独的位置: pub

与手动操作相比,使用面向方面的编程框架有哪些优势?谢谢。

你可以阅读马修·D·格罗夫斯(Matthew D.Groves)

否则的话,我们的头头会不时出现,所以他可能也会出现在这里

AOP的核心是将“交叉关注点”从主要逻辑中分离出来。日志记录、事务管理等都在整个应用程序中使用,但代码并不特定于给定的类,而是重复使用。AOP允许您将这些代码从类中分离出来,并将它们粘贴到其他地方

发件人:

}

日志代码与
Reverse
无关,它会将实际完成工作的代码弄乱。AOP允许您将代码移动到单独的位置:

  public class StringReverser : IStringReverser
  {
      [LoggingAspect]
      public string Reverse(string text)
      {
        if (text == null)
           return null;
        return new string(text.Reverse().ToArray());
     }
  }
以及日志代码:

  [Serializable]
  public class LoggingAspect : MethodInterceptionAspect
  {
    IMyLogger _log;

    public override void RuntimeInitialize(MethodBase method)
    {
        _log = MyServiceLocator.Get();
    }

    public override void OnInvoke(MethodInterceptionArgs args)
    {
        var methodName = args.Method.Name;
        var parameters = args.Method.GetParameters();

        _log.WriteLine(string.Format("{0} timestamp: {1}", methodName, 
                DateTime.Now));

        for (var i = 0; i < args.Arguments.Count; i++)
            _log.WriteLine(string.Format("{0} argument #{1}, {2} ({3}): {4}",
                methodName,
                i,
                parameters[i].Name,
                parameters[i].ParameterType,
                args.Arguments[i]));

        args.Proceed();

        _log.WriteLine(string.Format("{0} return value: {1}", methodName, 
            args.ReturnValue));
    }
}

它可以节省时间并实施适当的设计。但是我打赌你已经在你发布的链接上读到了。是的。然而,我必须证明框架的合理性,而不是手动操作,您可以这样做。我的主要论点是生产率。我只是想看看是否还有什么我忽略了的。谢谢,我读了这本书并且理解了这个概念。我只是想向某人证明这一点。有人告诉我,你可以自己手动操作——我相信我可以——但我的意见是,postsharp等可以提高生产率。如果我理解正确的话,我想MethodInterceptionSpect是postsharp提供的一种开箱即用的东西。你不能真正手动执行AOP。您需要一个框架来将“方面”编织到代码中。我想您可以将横切关注点划分为静态实用程序类,然后这样做,但是您会损失很多。这有点像DIY DI和DI框架。你可以自己做依赖注入,但是有一个框架就更好了。这个想法是,如果你有1000个业务方法或其他什么,并且它们需要记录,你可以将记录方面/建议应用到你的业务方法中。。如果此要求发生变化,例如日志记录的方式、要包含的参数等,您只有一个方面需要更新。如果您使用“胶水代码”手动执行,则必须更新1000个呼叫站点。。日志记录可能是AOP最简单的用例,真正的力量来自于对对象应用撤销/重做,或者对实体进行脏跟踪等等。
  [Serializable]
  public class LoggingAspect : MethodInterceptionAspect
  {
    IMyLogger _log;

    public override void RuntimeInitialize(MethodBase method)
    {
        _log = MyServiceLocator.Get();
    }

    public override void OnInvoke(MethodInterceptionArgs args)
    {
        var methodName = args.Method.Name;
        var parameters = args.Method.GetParameters();

        _log.WriteLine(string.Format("{0} timestamp: {1}", methodName, 
                DateTime.Now));

        for (var i = 0; i < args.Arguments.Count; i++)
            _log.WriteLine(string.Format("{0} argument #{1}, {2} ({3}): {4}",
                methodName,
                i,
                parameters[i].Name,
                parameters[i].ParameterType,
                args.Arguments[i]));

        args.Proceed();

        _log.WriteLine(string.Format("{0} return value: {1}", methodName, 
            args.ReturnValue));
    }
}