Properties 如何添加依赖于父级中包含的属性的CSLA业务规则?

Properties 如何添加依赖于父级中包含的属性的CSLA业务规则?,properties,parent,business-rules,csla,Properties,Parent,Business Rules,Csla,我正在添加一个“舍入”业务规则,以将十进制属性值舍入到单独整数属性中指定的小数位数。如果两个属性都是所讨论的业务对象的成员,那么这将非常有效。如下面的VB.Net代码所示 BusinessRules.AddRule(New Round(_decimalProperty, _precisionProperty)) 我有一个从CommonBusinessRule继承的私有Round类,其构造函数如下所示: Public Sub New(decimalProperty As IPropertyInf

我正在添加一个“舍入”业务规则,以将十进制属性值舍入到单独整数属性中指定的小数位数。如果两个属性都是所讨论的业务对象的成员,那么这将非常有效。如下面的VB.Net代码所示

BusinessRules.AddRule(New Round(_decimalProperty, _precisionProperty))
我有一个从CommonBusinessRule继承的私有Round类,其构造函数如下所示:

Public Sub New(decimalProperty As IPropertyInfo, precisionProperty As IPropertyInfo)
    MyBase.New(decimalProperty)

    InputProperties = New List(Of IPropertyInfo)()
    InputProperites.Add(decimalProperty)
    InputProperties.Add(precisionProperty)
End Sub
这会在任何一个属性发生更改时触发规则Execute,执行代码完全按照我的要求循环

问题:我现在遇到的情况是precisionProperty是父业务对象的属性。调用用于为子业务对象添加业务规则的CSLA方法时,子业务对象的父成员为null,因此我无法获取父对象属性的引用。在父字段不再为空后,是否有任何时间点允许我添加新的业务规则?如果是,用什么方法?还有别的办法吗


我们已经考虑过将对父业务对象的引用(通过构造函数)传递给子业务对象,但现在决定不采用这种方法(子业务对象实际上有6个级别,这似乎需要对代码生成方案进行返工).

BusinessBase中的父属性通常由BusinessListBase用于与其子级保持关系。除此之外,实际上不(不应该?)使用父属性


当我有一个具有影响子对象的属性的父对象时,我将规则放在父对象中,然后调用子对象上的任何规则。您可以传入任何您喜欢的值,甚至可以在子属性上拥有该属性的副本,并在父属性更改时进行设置

谢谢你的回复,凯莉。我们已经找到了一个类似的解决方案,它涉及父属性的“副本”,我们通过EventAggregator机制在子属性上保持同步。如果我理解的话,您的意思是可以通过在子级上调用规则时将值向下传递给子级来保持同步。我希望尝试一下,看看它是否比我们目前使用的解决方案更干净。再次感谢!我们最终决定采用直接同步机制,而不是EventAggregator机制。每当父对象中的依赖属性发生更改时,我们就直接在子对象中设置代理属性。为了实现这一点,代理属性被设置为“内部”(或VB中的“Friend”)。由于代理属性是子业务规则中的一个依赖项,因此父级不需要在子级上运行规则,只要父级中的精度发生变化,子级规则就会自动触发。我认为答案的第二部分很好,但我不认为有任何理由避免使用父级属性。我定义了一个属性,它基本上只是将父类型转换返回到其适当的类型。