/** @module data */

/**
 * Interface for data objects that can be versioned.
 * 
 * Versioning is often used as optimistic concurrency mechanism. 
 * 
 * The version doesn't have to be a number, but it is recommended to use sequential
 * values to determine if one object has newer or older version than another one.
 * 
 * It is a common pattern to use the time of change as the object version.
 * 
 * ### Example ###
 * 
 *     export class MyData implements IStringIdentifiable, IVersioned {
 *         public id: string;
 *         public field1: string;
 *         public field2: number;
 *         public version: string;
 *         ...
 *     }
 *     
 *     public updateData(correlationId: string, item: MyData): void {
 *         ...
 *         if (item.version < oldItem.version) {
 *             throw new ConcurrencyException(null, "VERSION_CONFLICT", "The change has older version stored value");
 *         }
 *         ...
 *     }
 */
export interface IVersioned {
	/** The object's version. */
	version: string;
}
