The idea here is to define a kind of value object that may be specified
or acquired in a manner that is only partially complete. Information from multiple instances
of such Objects may be "reconciled" to yield a more complete description of the
business object being modeled.
Data that may sometimes be unspecified should be modeled as Option[_] objects.
Reconciliation can be symmetrical, such that clearly inconsistent data trigger
a CantReconcileException, or may be asymmetrical, such that data in higher priority
objects shadow conflicting data in lower priority objects. reconcile and
reconcileLeaf are symmetrical implementations, reconcileOver and reconcileOverLeaf
are asymmetrical implementations.
Reconcilable classes should generally be final.
Utility methods only try to reconcile objects of identical implementation class.
The idea here is to define a kind of value object that may be specified or acquired in a manner that is only partially complete. Information from multiple instances of such Objects may be "reconciled" to yield a more complete description of the business object being modeled.
Data that may sometimes be unspecified should be modeled as Option[_] objects.
Reconciliation can be symmetrical, such that clearly inconsistent data trigger a CantReconcileException, or may be asymmetrical, such that data in higher priority objects shadow conflicting data in lower priority objects. reconcile and reconcileLeaf are symmetrical implementations, reconcileOver and reconcileOverLeaf are asymmetrical implementations.
Reconcilable classes should generally be final. Utility methods only try to reconcile objects of identical implementation class.