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