SAIF.Framework.Bindable business rules¶
This library implements no concrete business rules of its own — it defines only the mechanism for rule-violation notification (clsRulesManagerBase) and change notification (clsBindableBase, clsBindableCollectionBase). Concrete rule statements are defined in subclasses outside this library's scope. One implementation-level behavioral trait affecting correctness is documented below as BR-001.
BR-001: Rule violation notification requires a subscribed listener¶
| Field | Value |
|---|---|
| Statement | clsRulesManagerBase.OnRuleBroken and OnRuleNotBroken invoke their respective event delegates (RuleBroken(rule), RuleNotBroken(rule)) without a null check, so calling either method with zero subscribers throws a NullReferenceException at runtime.* |
| Trigger | A subclass invokes OnRuleBroken(rule) or OnRuleNotBroken(rule) while no listener has subscribed to the corresponding event. |
| Enforcement | SAIF.Framework.Bindable\clsrulesmanagerbase.cs — direct RuleBroken(rule); / RuleNotBroken(rule); invocation with no != null guard, unlike the guarded pattern used in clsBindableBase.OnIsModifiedChanged(). |
| Outcome | No defensive guard exists; an unhandled NullReferenceException propagates to the caller instead of the notification being silently skipped.* |
| Confidence | Inferred |
| Source | SAIF.Framework.Bindable\clsrulesmanagerbase.cs |
Notes¶
- Whether this unguarded invocation pattern has caused runtime failures in consuming code cannot be determined from this library alone.**
- Concrete business rule statements (i.e., what conditions constitute a broken rule) are defined by subclasses outside this library's scope and are not documented here.
Related documentation¶
Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with ** could not be confirmed; treat as unknown until verified.
Sources¶
SAIF.Framework.Bindable\clsrulesmanagerbase.csSAIF.Framework.Bindable\clsBindableBase.cs