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);
                });
    }

这是作者的一些帖子,可进一步阐明AspectF的目标:
  • AspectF fluent way to put Aspects into your code for separation of concern(博客)
  • AspectF(谷歌代码)
  • AspectF Fluent Way to Add Aspects for Cleaner Maintainable Code(CodeProject)

  • 根据作者的说法,我认为AspectF的设计不是,而不是AOP替代的,而是一种实现“关注点分离并保持代码整洁”的方法。

    一些想法/问题:
  • 随着项目的增长,对使用这种编码风格有什么想法吗?
  • 它是可扩展的体系结构吗?
  • 性能问题?
  • 可维护性与真正的AOP解决方案相比如何?
  • 最佳答案

    我不是要抨击这个项目,而是
    恕我直言,这是滥用AOP。方面并不适合所有内容,并且像这样使用,只会妨碍可读性。

    而且,我认为这错过了AOP的要点之一,即无需添加基础代码即可添加/删除/重新定义方面。

    应该在受影响的代码之外定义方面,以使它们成为真正的跨领域关注点。在AspectF的情况下,方面嵌入在受影响的代码中,这违反了SoC/SRP

    在性能方面没有任何代价(或可以忽略不计),因为没有运行时IL操作,如代码项目文章中所述。但是,我对CaSTLe DynamicProxy从未遇到过任何性能问题。

    关于c# - AspectF(一种流畅的Aspect Framework)是否可以像AOP一样使用而无需过多关注?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1662494/

    10-09 06:16