#
Поддержка исторических данных
Одной из отличительных особенностей формата является поддержка исторических данных — хронологии изменения публичных свойств пользовательского класса — бизнес-объекта. Это позволяет получить значение свойства на конкретный момент времени.
Для того, чтобы класс бизнес-объекта поддерживал работу с историческими данными он должен реализовывать интерфейс 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()— сохранение изменений в хранилище исторических значений.