Шаблон свойств привязки - Binding properties pattern - Wikipedia

В Шаблон свойств привязки объединяет несколько наблюдатели для принудительной синхронизации или согласования свойств в различных объектах каким-либо образом. Этот шаблон был впервые описан как метод Виктором Портоном.[1][2] Этот образец подпадает под шаблоны параллелизма.

Сравнение с аспектно-ориентированной реализацией

В качестве альтернативы аспектно-ориентированной реализации общих свойств может быть предложена привязка свойств. В библиотеке LibPropC ++ C ++ это тоже реализовано.[3]

Некоторые недостатки LibPropC ++ (с привязкой свойств):

  1. Его использование непрозрачно, так как для него необходимо объявить необходимые атрибуты объекта в качестве свойств и предоставить соответствующие методы доступа.
  2. Привязка атрибутов в LibPropC ++ не предназначена для замены вызовов методов
  3. В библиотеке не ведется история взаимодействий.[3]

Выполнение

Есть два типа привязки. Односторонняя привязка должна применяться, когда одно из свойств доступно только для чтения. В остальных случаях необходимо применять двустороннюю привязку.[2][3]

Бесконечные циклы можно устранить, заблокировав сигнал или сравнив назначенное значение со значением свойства перед назначением, или исключив ненужные назначения.[2][3]

Связывающие свойства разных типов могут быть достигнуты за счет Преобразования типов.[2][3]

Связывание свойств с преобразованиями может быть достигнуто за счет сведения функции преобразования к задаче связывания свойств, а функция может быть воображаема как преобразования типов.[2][3]

Процедурное программирование
Объектно-ориентированного программирования
Сигналы / программирование событий
Компоненты со свойствами
связывая свойства вместе

[2]

Результирующий контекст

Свойства синхронизируются автоматически. Между вызовами библиотеки они всегда имеют значения, выраженные EqualityConstraints.[3]

Недостатки

Механизм наблюдения за изменениями свойств требует определенных ресурсов.[3]

Образец кода

Эскиз кода для односторонней привязки может выглядеть следующим образом:

bind_multiple_one_way(src_obj, src_prop, dst_objs[], dst_props[]){  за (я, j) в (dst_objs, dst_props)  {    bind_properties_one_way(src_obj, src_prop, я, j);  }}

[2]

Двусторонняя привязка может быть выражена следующим образом (в C ++):

// В этом псевдокоде не учитываются присвоения начальных значений аккаунтуbind_two_way(prop1, prop2){  связывать(prop1, prop2);  связывать(prop2, prop1);}

[3]

Выполнение привязки (то есть подключение уведомления об изменении свойства в обработчике событий) может выглядеть следующим образом:

on_property_change(src_prop, dst_prop){  block_signal(src_obj, on_property_change);  dst_prop := src_prop;  unblock_signal(src_obj, on_property_change);}

[3]

Смотрите также

Рекомендации

  1. ^ «Связывающие свойства». Каннингем и Каннингем. Каннингем и Каннингем. Получено 4 февраля 2015.
  2. ^ а б c d е ж грамм Портон, В. «Связывание свойств объектов: программное обеспечение Extreme Code». Экс-код. Экс-код. Архивировано из оригинал 20 июня 2017 г.. Получено 1 сентября 2008.
  3. ^ а б c d е ж грамм час я j Эверманн, Дж., Конструкция ассоциации в концептуальном моделировании - анализ с использованием онтологической модели Бунге, Веллингтон, Новая Зеландия: Школа информационного менеджмента, Университет Виктории.