Особенности, алгоритмы создания и использования динамических свойств

DynamicProperties - экземпляр класса NameObjectCollection (расширение класса NameObjectCollectionBase), который является, по сути, словарем, хранящим пары значений строка-объект.

Динамические свойства помогают хранить дополнительную информацию об объекте и помогают в ситуациях, когда логика использования объекта разнится от обстоятельств (вызов с разных форм, разными пользователями и т.д.).

Динамические свойства не сохраняются в базу.

Использование динамических свойств

Обратиться к динамическим свойствам объекта можно следующим образом:

dataObject.DynamicProperties

Добавление свойства

var someObject = new object();
dataObject.DynamicProperties.Add("propertyName", someObject);

Проверка на наличие свойства у объекта

if (dataObject.DynamicProperties.ContainsKey("propertyName"))
{
    ...
}

Удаление свойства объекта

dataObject.DynamicProperties.Remove("propertyName");

Основной сценарий использования динамических свойств объекта

Основной сценарий использования на прикладных проектах следующий:

  • В динамические свойства объекта добавляется некий флаг.
  • В бизнес-сервере обновления объекта проверяется наличие этого флага и выполняется или не выполняется набор некоторых действий.

Пример

Объект СтрокаПланаПогашения. Например, необходимо ввести шаблон оплаты, содержащий в себе информацию о КредитнойКарте и Кредите, но с незаполненными полями ДатыОплаты и Суммы. Однако, в бизнес-сервере обновления объекта уже находится проверка, отвечающая за заполненность этих полей. Следовательно, объект не сможет обновиться и сохраниться в базу.

На форме создания шаблона оплаты перед отправкой объекта на сохранение необходимо добавить динамическое свойство

dataObject.DynamicProperties.Add("Template", true); @@

А в бизнес-сервере изменить проверку следующим образом:

if (!UpdatedObject.DynamicProperties.ContainsKey("Template"))
{
    // Проверки на обязательность заполненности полей Сумма и ДатаОплаты
}