面向方面的编程框架

问题描述:

使用面向方面编程框架(如postsharp)手动执行此操作有什么优势?谢谢。面向方面的编程框架

+1

这样可以节省时间并执行适当的设计。但我敢打赌,你已经在你发布的链接上阅读了这篇文章。 – Madmenyo 2014-10-02 11:30:31

+0

是的。然而,我必须证明框架的合理性,而不是手动进行,你可以。我主要的观点是生产力。我只是想检查是否还有其他我忽略的东西。 – cs0815 2014-10-02 11:45:03

对于深潜,你可以阅读马修D.格罗夫斯AOP in .NET: Pracitical Aspect-Oriented Programming

否则,主管,Gael Fraiteur,不时在SO上,所以他也可能会在这里弹出。

在它的核心AOP是关于从你的主要逻辑中分离'交叉切割问题'。诸如日志记录,事务管理等等在整个应用程序中使用,但代码不是特定于给定的类,而是被重复使用。 AOP允许您将这些代码从您的课程中解脱出来并粘贴到其他地方。

https://blog.safaribooksonline.com/2013/07/17/why-you-should-be-using-aspect-oriented-programming/

​​

}

日志代码无关与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)); 
    } 
} 
+0

谢谢,我读了这本书并理解了这个概念。我只是试图向某人辩护。我被告知你可以自己手动做 - 我确信我可以 - 但我认为postharp等提高了生产力。如果我理解正确,我想MethodInterceptionAspect是postsharp提供的开箱即用功能。 – cs0815 2014-10-02 11:43:25

+1

您无法真正手动执行AOP。您需要一个框架将“方面”编织到代码中。我想你可以把你们的跨学科问题分成静态实用课程,并且这样做,但是你会失去很多。这有点像DIY DI与DI框架。你可以自己做依赖注入,但是对于框架来说它更好。 – 2014-10-02 11:54:50

+1

这个想法是,如果你有1000个业务方法或其他什么,并且他们需要登录,你可以将日志方面/建议应用到你的业务方法中。如何完成日志记录,包含哪些参数等等,你只需要更新一个方面。如果你使用“glue-code”手动执行,你将不得不更新1000个呼叫站点。 对于AOP来说,日志记录可能是最天真的用例,当你将撤消/重做应用到对象或者脏跟踪到实体等。 – 2014-10-02 11:57:14