c# - AspectF(一种Fluent Aspect Framework)是一种类AOP的设计,可以放心使用吗?

标签 c# aop aspects

Omar Al Zabir正在寻找“一种更简单的方法来进行 AOP 样式编码”。

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

这不是真正的 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 并不是设计成 AOP 替代品,而是一种实现“关注点分离并保持代码整洁”的方法。

一些想法/问题:

  • 随着项目的发展,有没有想过使用这种编码风格?
  • 它是可扩展的架构吗?
  • 性能问题?
  • 与真正的 AOP 解决方案相比,可维护性如何?

最佳答案

我不是要抨击这个项目,但是 恕我直言,这是在滥用 AOP。方面并不适合所有情况,这样使用只会妨碍可读性。

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

方面应该在受影响的代码之外定义,以使它们成为真正的横切关注点。在 AspectF 的案例中,方面嵌入受影响的代码,这违反了 SoC/SRP .

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

关于c# - AspectF(一种Fluent Aspect Framework)是一种类AOP的设计,可以放心使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1662494/

相关文章:

ruby - Ruby 中的面向方面编程

java - "after() : staticinitialization(*)"的@AspectJ 语法

spring - Spring 中的拦截器与方面?

c# - 默认情况下,我应该使用内部可见性还是公共(public)可见性?

javascript - 从 AngularJS 客户端发布到 ASP.NET WebApi 服务器

c# - Entity Framework Core 2.0 多对多关系同一张表

javascript - 我可以在执行meld aop方法后添加方法吗

c# - 按另一个 List<T> 对 List<T> 进行排序

spring - 如何使用 Spring AOP(或 AspectJ)定义/配置多个方面的优先级

java - 在 MethodInterceptor 中获取目标