Skip to content

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.

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.cs
  • SAIF.Framework.Bindable\clsBindableBase.cs