@mustafo

Как реализовать dependency-tracking и change-notification в PHP?

Хочу в PHP реализовать "dependency-tracking" и "change-notification" между свойствами разных объектов.

Всё должно выглядеть примерно так:
<?php

// Создаем объекты
$object1 = new Class1;
$object2 = new Class2;
$object3 = new Class3;

// Указываем зависимости.
$object2->prop = $object1->prop + 5;
$object3->prop = $object2->prop * 2;

// Меняем какое-то свойство
$object1->prop = 2;

// Свойства автоматически обновляются
echo $object2->prop; // -> 7
echo $object3->prop; // -> 14


То есть, при изменении свойства какого-то объекта, все зависящие от него свойства других объектов должны меняться в реальном времени.

Как лучше всего это реализовать? Есть ли какой-нибудь шаблон проектирования, который поможет осуществить это?
  • Вопрос задан
  • 248 просмотров
Пригласить эксперта
Ответы на вопрос 1
nekt
@nekt
программист
Есть мнение, что не стоит городить огород с каскадным обновлением объектов. Скорее всего достаточно будет в целевых объектах иметь свойства-геттеры, которые выполняют некую функцию при каждом запросе к ним. Такой подход будет гораздо проще поддерживать, нежели трекинг.

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

Войдите, чтобы написать ответ

Похожие вопросы