AspectF(一种流畅的Aspect框架)是一种类似AOP的设计,可以毫不费力地使用吗?

Jon*_*ing 9 c# aop aspects

Omar Al Zabir正在寻找"一种更简单的AOP风格编码方式".

他创建了一个名为AspectF的框架,这是一种"将Aspects添加到代码中的流畅而简单的方法".

它不是真正的AOP,因为它不进行任何编译时或运行时编织,但它是否实现了与AOP相同的目标?

以下是AspectF用法的示例:

    public void InsertCustomerTheEasyWay(string firstName, string lastName, int age,
        Dictionary<string, string> attributes)
    {
        AspectF.Define
            .Log(Logger.Writer, "Inserting customer the easy way")
            .HowLong(Logger.Writer, "Starting customer insert", "Inserted customer in {1} seconds")
            .Retry()
            .Do(() =>
                {
                    CustomerData data = new CustomerData();
                    data.Insert(firstName, lastName, age, attributes);
                });
    }
Run Code Online (Sandbox Code Playgroud)

以下是作者的一些帖子,进一步阐明了AspectF的目标:

根据作者的说法,我认为AspectF的设计不是AOP的替代品,而是一种实现"分离关注并保持代码良好和干净"的方法.

一些想法/问题:

  • 关于使用这种编码风格作为项目的任何想法都在增长?
  • 它是一个可扩展的架构吗?
  • 性能问题?
  • 可维护性与真正的AOP解决方案相比如何?

Mau*_*fer 5

我并不是要打击这个项目,但恕我直言,这是滥用AOP.方面不适合所有方面,并且这样使用它只会妨碍可读性.

此外,我认为这忽略了AOP的一个要点,即能够在不触及底层代码的情况下添加/删除/重新定义方面.

应在受影响的代码之外定义方面,以使其成为真正的跨领域问题.在AspectF的情况下,方面嵌入受影响的代码中,这违反了SoC/SRP.

性能方面没有任何惩罚(或者它可以忽略不计),因为没有运行时IL操作,正如codeproject文章中所解释的那样.但是,我从未遇到过Castle DynamicProxy的任何性能问题.