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的设计不是,而不是AOP替代的,而是一种实现“关注点分离并保持代码整洁”的方法。
一些想法/问题:
最佳答案
我不是要抨击这个项目,而是
恕我直言,这是滥用AOP。方面并不适合所有内容,并且像这样使用,只会妨碍可读性。
而且,我认为这错过了AOP的要点之一,即无需添加基础代码即可添加/删除/重新定义方面。
应该在受影响的代码之外定义方面,以使它们成为真正的跨领域关注点。在AspectF的情况下,方面嵌入在受影响的代码中,这违反了SoC/SRP。
在性能方面没有任何代价(或可以忽略不计),因为没有运行时IL操作,如代码项目文章中所述。但是,我对CaSTLe DynamicProxy从未遇到过任何性能问题。
关于c# - AspectF(一种流畅的Aspect Framework)是否可以像AOP一样使用而无需过多关注?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1662494/