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

时间:2012-07-17 18:08:17

标签: properties parent business-rules csla

我正在添加一个“舍入”业务规则,将十进制属性值舍入为单独的整数属性中指定的小数位数。如果两个属性都是相关业务对象的成员,则此方法很有效。如下面的VB.Net代码......

BusinessRules.AddRule(New Round(_decimalProperty, _precisionProperty))

我有一个私有的Round类,它继承自CommonBusinessRule,其构造函数如下:

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,而Execute代码就会完全按照我想要的方式进行循环。

问题:我现在遇到的情况是precisionProperty是Parent业务对象的属性。当调用用于添加子业务对象的业务规则的CSLA方法时,子业务对象的父成员为空,因此我无法获得父属性的引用。在Parent字段不再为null之后是否有任何时间点,我可以添加新的业务规则?如果是这样,用什么方法?还有另一种方法吗?

我们已经考虑将对父业务对象(通过构造函数)的引用传递给子项,但是现在已经决定不采用这种方法(孩子实际上是6级深度,看起来这需要我们的工作重做代码生成方案)。

1 个答案:

答案 0 :(得分:1)

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

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