5

我的一些同事认为验证是横切关注点的一个例子,并认为面向方面编程是处理验证关注点的好方法。要使用 PostSharp 表示法,他们认为这样的做法是个好主意:

[InRange(20.0, 80.0)]
public double Weight
{
    get { return this.weight; }
    set { this.weight = value; }
}

我的观点是验证是算法的固有部分,没有必要使用 AOP 将其推到幕后。然而,这很像一种直觉,我对此没有非常明确的理由。

你认为什么时候用 AOP 处理验证是个好主意,什么时候用你的主代码内联处理它更好?

4

2 回答 2

2

看起来很像MVC 使用的Microsoft DataAnnotations 。

您并没有真正“把它推到幕后”,因为所有相关信息都在属性构造函数中。您只是将嘈杂的样板推到幕后并进入自己的班级。您也不再需要显式的支持字段,您可以只使用自动获取器和设置器。所以现在,8 行(或更多)代码可以减少到 1 行和 1 个属性。

我认为,如果您的替代方法是将一些验证代码放在 setter 中,并且您在项目中多次执行此操作以使其成为重复的样板,那么是的,我认为这是一个有效的横切关注点,适合使用 PostSharp . 否则,我认为目前还没有一两个地方可以证明引入第三方工具是合理的。

于 2012-05-10T14:48:20.710 回答
0

我认为这是一个横切关注点,尽管我从未专门使用 AOP 实现它。

也就是说,有许多不同的验证场景,我怀疑它们都可能完全是黑色或白色。

Microsoft 模式和实践 - 横切关注点

于 2012-05-09T22:18:59.603 回答