AOP脏跟踪

时间:2009-05-22 13:11:34

标签: c# .net aop

过去我使用了一些不同的方法对我的实体进行脏检查。我一直在尝试使用AOP来实现这个新项目。这将要求我在我的类中的每个proptery上添加一个属性,我想在设置属性时调用脏标志逻辑。如果我必须为每个属性添加额外的代码行,那么只需在setter中调用SetDirty()方法有什么好处。我想我问的是,使用AOP方法有什么优势呢?

6 个答案:

答案 0 :(得分:2)

我会说在这种情况下不仅没有任何优势:还有一点不利之处。无论你是拨打dirty()还是使用AOP,你都使用相同数量的代码行,但只要有意图,只需调用dirty()就更简单明了。

老实说,AOP有点超卖,我想。在阅读代码方面,它增加了另一个间接级别,通常它不会回报。

在这里要考虑的关键是,它是否有助于下一个读这篇文章的人(可能是你几个月后)更快更清楚地了解我正在尝试做什么。如果您无法确定不那么直接的方法有什么好处,那么您可能不应该使用它。 (我说这是一个Haskell程序员,这意味着我对自己的非直接方法很不利。)

答案 1 :(得分:0)

优点是,如果您决定更改如何调用脏标志逻辑的实现,您只需要进行一次更改(在AOP方法的主体中),而不是N次更改(替换所有{{1用其他东西调用。)

答案 2 :(得分:0)

如果必须使用属性装饰实体,我认为没有任何好处。特别是如果你所做的只是调用一个方法。如果逻辑更复杂,那么我可以为使用AOP做出争论。

如果让我们说每次你修改一个属性你想跟踪这个变化作为一个版本,这可能是更复杂的行为,可以注入,然后将这个抽象出来的属性可能是有益的。同时你可能想要一次更改几个属性的版本,所以我回到那里没有多大价值。

答案 3 :(得分:0)

AOP的使用是针对交叉问题的。这意味着您希望拥有日志记录,安全性等功能,但业务逻辑确实不属于您的类。这可能是Dirty标志逻辑,因为Domain对象不应该关心它已被更改。这取决于您的DirtyLogicUtility或它的名称。

例如,您希望每次调用一个方法时都要记录每个函数中的每个函数,但稍后您希望拥有逻辑,以便在每个其他调用中记录它。

AOP让你的课程保持干净,做他们应该做的事情,同时留下其他部分。

答案 4 :(得分:0)

某些AOP实现(特别是PostSharp)允许您在程序集级别应用带有通配符的属性,以确定它适用于哪些类。

答案 5 :(得分:0)

为什么您希望脏检查是实体的责任?您可以在其他地方管理它。该模式称为Unit of work