# 
        Поддержка исторических данных
    
Одной из отличительных особенностей формата является поддержка исторических данных — хронологии изменения публичных свойств пользовательского класса — бизнес-объекта. Это позволяет получить значение свойства на конкретный момент времени.
Для того, чтобы класс бизнес-объекта поддерживал работу с историческими данными он должен реализовывать интерфейс XyloCode.BusinessData.IBusinessObject:
public interface IBusinessObject
{
    IDictionary<string, byte[]> BusinessObjectData { get; set; }
}Например:
[BusinessObjectId(3)]
public class Person : IBusinessObject
{
    IDictionary<string, byte[]> IBusinessObject.BusinessObjectData { get; set; }
    [TagId(1)]
    public int Id { get; set; }
    [TagId(2)]
    public string Surname { get; set; }
 
    [TagId(3)]
    public string Name { get; set; }
}
        # 
        Автоматическая фиксация изменений
    
Для режима "сериализация - десериализация - правка - сериализация" возможна автоматическая фиксация изменений при работе с бизнес-объектом, она активируется свойством HistoricalCapture бинарного сериализатора:
var serializer = new XyloCode.BusinessData.Serializer();
serializer.HistoricalCapture = true;
        # 
        Работа с историческими объектами
    
Исторический объект (класс XyloCode.BusinessData.HistoricalObject) — специальный инструмент для работы с историческими данными бизнес-объекта, он позволяет устанавливать, редактировать и получать значения свойств на определенный момент времени.
var serializer = new XyloCode.BusinessData.Serializer();
var person = new Person {
    Id = 1,
    Surname = "Ciccone",
    Name = "Madonna"
};
var histObj = new XyloCode.BusinessData.HistoricalObject<Person>(serializer, person);
histObj.SetAfter<string>("Surname", new DateTime(1985, 8, 16), "Penn");
histObj.SetAfter<string>("Surname", new DateTime(2000, 12, 22), "Ritchie");
histObj.Save();
var now = histObj.Get<string>("Surname");
Console.WriteLine(now);> RitchieОсновные методы, используемые при работе с историческими объектами:
- Load()— загрузка словаря- BusinessObjectDataи хранилищ исторических значений;
- Refresh()— актуализация словаря- BusinessObjectDataв соответствии с данными хранилищ исторических значений;
- Update()— актуализация словаря- BusinessObjectDataтекущими значениями свойств экземпляра класса бизнес-объекта;
- Get()— получение значения свойства бизнес-объекта на конкретную дату и время;
- Set()— установка текущего значения свойства бизнес-объекта;
- SetAfter()— установка исторического значения свойства бизнес-объекта, которое должно начать действовать с указанной даты;
- SetBefore()— установка исторического значения свойства бизнес-объекта, которое должно действовать до указанной даты;
- RemoveOnDate()— удаление исторического значения свойства бизнес-объекта, которое действует на указанную дату;
- RemoveFromPastBefore()— удалить все исторические значения свойства бизнес-объекта, действовавшие до указанной даты и время действия которых прошло;
- RemoveFromPastAfter()— удалить все исторические значения свойства бизнес-объекта, которые действовали с указанной даты и время действия которых прошло;
- RemoveFromFutureBefore()— удалить все исторические значения свойства бизнес-объекта, которые должны действовать до указанной даты и время действия которых ещё не наступило;
- RemoveFromFutureAfter()— удалить все исторические значения свойства бизнес-объекта, которые должны действовать с указанной даты и время действия которых ещё не наступило;
- Save()— сохранение изменений в хранилище исторических значений.
 
                                