2012-07-17 3 views
0

10 진수 속성 값을 별도의 정수 속성에 지정된 소수 자릿수로 반올림하는 "반올림"비즈니스 규칙을 추가합니다. 이 두 속성이 문제의 비즈니스 개체의 멤버 인 경우 제대로 작동합니다. 다음 VB.Net 코드에서와 같이 ... 부모에 포함 된 속성에 따라 CSLA 비즈니스 규칙을 어떻게 추가합니까?

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

나는 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 

변경 및 실행 코드는 원하는대로 정확하게 반올림됩니다.

문제점 : 이제 precisionProperty가 상위 비즈니스 오브젝트의 특성 인 경우가 있습니다. 하위 Business Object에 대한 비즈니스 규칙을 추가하는 CSLA 메소드가 호출되면 하위 Business Object의 상위 구성원이 널 (NULL)이 G로 상위의 특성에 대한 참조를 얻을 수 없습니다. 부모 필드가 더 이상 null이 아니고 새로운 비즈니스 규칙을 추가 할 수 있도록 허용하는 시점이 있습니까? 그렇다면 어떤 방법으로? 다른 접근법이 있습니까?

생성자를 통해 상위 비즈니스 객체에 대한 참조를 자식으로 전달했지만이 접근 방식에 대해 지금 결정했습니다 (자식은 실제로 6 레벨 깊이이므로이 경우 재 작업이 필요합니다). 우리의 코드 생성 체계).

답변

1

BusinessBase의 부모 속성은 일반적으로 BusinessListBase에서 해당 자식과의 관계를 유지하는 데 사용됩니다. 부모 재산은 실제로 그 밖에 사용되어서는 안됩니다.

자식 개체에 영향을주는 속성이있는 부모 개체가있을 때 하위 개체에 대한 규칙을 호출 할 규칙을 부모 개체에 넣습니다. 자식에 대한 속성 복사본이있는 지점까지 원하는 값을 전달할 수 있으며 부모 속성이 변경 될 때 설정하면됩니다.

+0

응답 해 주셔서 감사합니다. Kelly. 우리는 EventAggregator 메커니즘을 통해 하위에 동기화 된 부모 속성의 "사본"과 관련된 비슷한 솔루션을 발견했습니다. 이해한다면 아이에게 규칙이 호출 될 때 자식에게 값을 전달하여 동기화 상태를 유지할 수 있다고 말하고 있습니다. 이 방법을 사용해보고 현재 사용중인 해결 방법보다 깨끗한 지 확인하십시오. 다시 한 번 감사드립니다! –

+0

우리는 마침내 EventAggregator 메커니즘 대신 직접 동기화 메커니즘에 정착했습니다. 부모의 종속 속성이 변경 될 때마다 우리는 자식의 대리 속성을 직접 설정합니다. 이를 허용하기 위해 대리 속성은 "내부"(또는 VB의 "Friend")로 만들어집니다. 서로 게이트 속성은 하위 비즈니스 규칙의 종속성이므로 부모가 자식에 대한 규칙을 실행할 필요가 없으며 부모 규칙의 정확도가 변경 될 때마다 자식 규칙이 자동으로 실행됩니다. –

+0

답안의 두 번째 부분은 훌륭하다고 생각하지만 Parent 속성을 피할 이유가 있다고 생각하지 않습니다. 기본적으로 부모 캐스팅을 적절한 유형으로 반환하는 속성을 정의했습니다. – Andy