Historic Modeling is a method of distributed smart client software construction. It is based on a model of software behavior as a graph of partially ordered facts.
![]()
Download the reference implementation at http://correspondence.codeplex.com.
The idea of historic modeling is to record changes to a system, instead of its state. The current state of a system can be calculated from a history of changes, but not the other way around. The history contains more information than the state.
History makes a number of operations easy that are difficult when dealing with state. Recognizing and resolving conflicts between two parties, caching and synchronizing changes, and durably transmitting messages all become simple operations. In traditional state-based modeling, these operations require complex algorithms or specialized tools. These operations, however, are natural by-products of a historic model.
There are, on the other hand, several operations that a historic model does not perform as well as a state-based model. Searching a large set of data and generating aggregate reports, while simple operations in a relational database, are difficult in a history. It is best to integrate a historic model with a relational model for searching and reporting. A few simple techniques keep these two models in sync.