Facets provide a general-purpose mechanism for non-intrusively extending the type system of an application. This is particularly useful for versioning an application.
Section 30.2 introduces the facet concept and presents the relevant APIs.
Section 30.3 presents a few traditional approaches to versioning and their problems. Sections
30.4 to
30.6 show how to use facets to implement versioning, and
Section 30.7 discusses design choices when adding versioning to a system.