This articlemay beconfusing or unclear to readers. Please helpclarify the article. There might be a discussion about this onthe talk page.(May 2017) (Learn how and when to remove this message) |
Thebinding properties pattern is combining multipleobservers to force properties in different objects to be synchronized or coordinated in some way. Thispattern was first described as a technique by Victor Porton.[1][2] This pattern comes underconcurrency patterns.
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):
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 throughtype 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]
Properties are being kept synchronized automatically. Between library calls they always have the values expressed by the EqualityConstraints.[3]
Property changes watching mechanism acquires some resources.[3]
Code sketch for one-way binding may look like as follows:
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);}}
Two-way binding can be expressed as follows (inC++):
// In this pseudo-code are not taken into the account initial values assignmentsbind_two_way(prop1,prop2){bind(prop1,prop2);bind(prop2,prop1);}
Accomplishing the binding (i.e. connecting the property change notification in an event handler) may be like as follows:
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);}