如何监视属性中的更改?(作为更改 /of/ 属性的反对)



我经常使用Perl/Moose属性来保存对象的集合。我知道可以监视整个属性是否设置。在这种情况下,可以使用触发器。这样还可以监视属性中的对象。但是如何监控收藏呢?如果属性是(例如(对象数组,是否可以监视是否添加了对象?

我正在寻找的是一种方法修饰符,例如"之前"或"周围",用于在属性上调用内置函数(如 push或shift(时。这将允许非常通用的解决方案,例如仅在有更改时保存。

push这样的操作不是在属性本身上执行的,而是在该属性引用的数组对象上执行的。

因此,观察此类操作的唯一可靠方法是从该数组对象内部 - 通过将其tie到适当的类。但这是相当黑暗的Perl魔法,通常是不可取的(缓慢,难以正确完成,可能会暴露其他模块中的错误,并且级别非常低(。

通常更好的方法是选择停止公开数组引用的设计。 例如,您可以提供一个方法$foo->push_attribute(42)而不是push @{ $foo->attribute }, 42。在该方法中,您可以实现所需的任何钩子。

最新更新