Binding properties pattern
![]() | This article may be confusing or unclear to readers. (May 2017) |
The binding properties pattern is combining multiple observers to force properties in different objects to be synchronized or coordinated in some way. This pattern was first described as a technique by Victor Porton.[1][2] This pattern comes under concurrency patterns.
Comparison with aspect-oriented implementation
As an alternative to the aspect-oriented implementation of mutual properties, property binding can be proposed. In LibPropC++ C++ library it is implemented too.[3]
Some weakness in the LibPropC++ (with property binding):
- Its use is not transparent as it requires to be declared necessary object attributes as properties and appropriate accessor methods must be provided
- Binding of attributes in LibPropC++ is not designed to replace method calls
- The library does not maintain an interaction history.[3]
Implementation
There are two types of binding. One-way binding should be applied when one of the properties is read-only. In other cases, two-way binding must be applied.[2][3]
Infinite loops can be eliminated by blocking the signal, or comparing the assigned value with the property value before assignment, or eliminating unnecessary assignments.[2][3]
Binding properties of different types can be achieved through type conversions.[2][3]
Binding properties with transformations can be achieved through reducing the transformation function to the problem of binding properties, and the function can be imaginary consider as Type Conversions.[2][3]
Resulting context
Properties are being kept synchronized automatically. Between library calls they always have the values expressed by the EqualityConstraints.[3]
Deficiencies
Property changes watching mechanism acquires some resources.[3]
Sample code
Code sketch for one-way binding may look like as follows: <syntaxhighlight lang="cpp">
bind_multiple_one_way(src_obj, src_prop, dst_objs[], dst_props[]) {
for (i, j) in (dst_objs, dst_props) { bind_properties_one_way(src_obj, src_prop, i, j); }
} </syntaxhighlight>[2]
Two-way binding can be expressed as follows (in C++): <syntaxhighlight lang="cpp"> // In this pseudo-code are not taken into the account initial values assignments bind_two_way(prop1, prop2) {
bind(prop1, prop2); bind(prop2, prop1);
} </syntaxhighlight>[3]
Accomplishing the binding (i.e. connecting the property change notification in an event handler) may be like as follows: <syntaxhighlight lang="cpp"> on_property_change(src_prop, dst_prop) {
block_signal(src_obj, on_property_change); dst_prop := src_prop; unblock_signal(src_obj, on_property_change);
} </syntaxhighlight>[3]
See also
References
- ^ "Binding Properties". Cunningham & Cunningham. Cunningham & Cunningham. Retrieved 4 February 2015.
- ^ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 Porton, V. "Binding together Properties of Objects". Victor Porton. Retrieved 25 February 2021.
- ^ 3.00 3.01 3.02 3.03 3.04 3.05 3.06 3.07 3.08 3.09 Evermann, J., The Association Construct in Conceptual Modelling - An Analysis Using the Bunge Ontological Model, Wellington, New Zealand: School of Information Management, Victoria University