我的一些同事认为验证是跨领域关注的一个例子,并认为面向方面编程是处理验证问题的好方法。要使用PostSharp表示法,他们认为这样的事情是个好主意:
[InRange(20.0, 80.0)]
public double Weight
{
get { return this.weight; }
set { this.weight = value; }
}
我认为验证是算法的固有部分,没有必要使用AOP将其推送到幕后。然而,这很像一种直觉,我没有一个非常明确的理由。
您认为使用AOP处理验证以及何时更好地与主代码一起处理它是一个好主意?
答案 0 :(得分:2)
看起来很像MVC使用的Microsoft DataAnnotations。
你并不是真的“在幕后推动它”,因为所有相关信息都在属性构造函数中。你只是把嘈杂的样板推到幕后并进入自己的班级。您也不再需要明确的支持字段,您只需使用自动获取器和设置器。所以现在,8行(或更多)代码可以减少到1行和1个属性。
我认为,如果您的选择是在设置器中放置一些验证代码,并且您在项目中多次执行该操作,那么它将成为重复的样板,那么是的,我认为这是一个有效的交叉关注并适合使用PostSharp。否则,我认为一两个地方还没有理由引进第三方工具。
答案 1 :(得分:0)
我认为这是一个跨领域的问题,尽管我从未专门用AOP实现它。
也就是说,有许多不同的验证方案,我怀疑它们都可能都是黑色或白色。