Как заметить родительский объект, что дочерние объекты были изменены? - PullRequest
0 голосов
/ 14 января 2019

Если мне нужно, чтобы объект знал об изменении его состояния, я делаю все свойства приватными и добавляю для них сеттеры и геттеры.

А если свойство объекта является другим объектом? Я могу получить его по ссылке с помощью метода get, изменить его, и родительский объект не узнает об этом.

Полагаю, это обычная проблема, и она должна иметь традиционное решение. О каком шаблоне мне следует прочитать?

На самом деле дочерний объект имеет другой объект, и я хочу уведомить основного родителя. Рекурсивный

1 Ответ

0 голосов
/ 14 января 2019

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

Однако, если вы моделируете большие графоподобные структуры, вышеупомянутый подход может быть не очень практичным. В этом случае вы можете положиться на реализацию Observer Pattern или любого из его вариантов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...