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. This pattern comes under concurrency 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.
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.
Infinite loops can be eliminated by blocking the signal, or comparing the assigned value with the property value before assignment, or eliminating unnecessary assignments.
Binding properties of different types can be achieved through type conversions.
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.
Properties are being kept synchronized automatically. Between library calls they always have the values expressed by the EqualityConstraints.
Property changes watching mechanism acquires some resources.
Code sketch for one-way binding may look like as follows:
import java.util.Map;
import javafx.util.Pair;
void bindMultipleOneWay(Pair<X, Y> src, Map<X, Y> dst) {
for (Map.Entry<X, Y> pair : dst.entrySet()) {
bindPropertiesOneWay(src.getKey(), src.getValue(), pair.getKey(), pair.getValue());
}
}
Two-way binding can be expressed as follows:
void bindTwoWay(X prop1, X 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:
void onPropertyChange(X src, X dst) {
blockSignal(src, onPropertyChange);
dst = src;
unblockSignal(src, onPropertyChange);
}