WikiDer > Шаблон свойств привязки - Википедия
Эта статья может быть сбивает с толку или неясно читателям. (Май 2017 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
В Шаблон свойств привязки объединяет несколько наблюдатели для принудительной синхронизации или согласования свойств в различных объектах каким-либо образом. Этот шаблон был впервые описан как метод Виктором Портоном.[1][2] Этот образец подпадает под шаблоны параллелизма.
Сравнение с аспектно-ориентированной реализацией
В качестве альтернативы аспектно-ориентированной реализации общих свойств может быть предложена привязка свойств. В библиотеке LibPropC ++ C ++ это тоже реализовано.[3]
Некоторые недостатки LibPropC ++ (с привязкой свойств):
- Его использование непрозрачно, так как для него необходимо объявить необходимые атрибуты объекта в качестве свойств и предоставить соответствующие методы доступа.
- Привязка атрибутов в LibPropC ++ не предназначена для замены вызовов методов
- В библиотеке не ведется история взаимодействий.[3]
Выполнение
Есть два типа привязки. Односторонняя привязка должна применяться, когда одно из свойств доступно только для чтения. В остальных случаях необходимо применять двустороннюю привязку.[2][3]
Бесконечные циклы можно устранить, заблокировав сигнал или сравнив назначенное значение со значением свойства перед назначением, или исключив ненужные назначения.[2][3]
Связывающие свойства разных типов могут быть достигнуты за счет Преобразования типов.[2][3]
Связывание свойств с преобразованиями может быть достигнуто за счет сведения функции преобразования к задаче связывания свойств, а функция может быть воображаема как преобразования типов.[2][3]
Результирующий контекст
Свойства синхронизируются автоматически. Между вызовами библиотеки они всегда имеют значения, выраженные 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); }}
Двусторонняя привязка может быть выражена следующим образом (в C ++):
// В этом псевдокоде не учитываются присвоения начальных значений аккаунтуbind_two_way(prop1, prop2){ связывать(prop1, prop2); связывать(prop2, prop1);}
Выполнение привязки (то есть подключение уведомления об изменении свойства в обработчике событий) может выглядеть следующим образом:
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);}
Смотрите также
Рекомендации
- ^ «Связывающие свойства». Каннингем и Каннингем. Каннингем и Каннингем. Получено 4 февраля 2015.
- ^ а б c d е ж грамм Портон, В. «Связывание свойств объектов: программное обеспечение Extreme Code». Экс-код. Экс-код. Архивировано из оригинал 20 июня 2017 г.. Получено 1 сентября 2008.
- ^ а б c d е ж грамм час я j Эверманн, Дж., Конструкция ассоциации в концептуальном моделировании - анализ с использованием онтологической модели Бунге, Веллингтон, Новая Зеландия: Школа информационного менеджмента, Университет Виктории.