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 fluent way to put Aspects into your code for separation of concern (博客)
- AspectF (谷歌代码)
- AspectF Fluent Way to Add Aspects for Cleaner Maintainable Code (代码项目)
根据作者的说法,我认为 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/