Существует ли шаблон распространения состояния конфигурации по графу объектов?

StackOverflow https://stackoverflow.com//questions/20013118

Вопрос

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

Проблема

A является сложным.Чтобы избежать «объекта бога», часть логики вынесена в B и C.

Теперь служит фасад.Это зависит от B и C.

A -> B
  -> C

Однако у A есть данные конфигурации, которые нужны B и C.Поэтому нам необходимо синхронизировать данные.

b.value1 = a.value1
b.value2 = a.value2

c.value1 = a.value1
c.value2 = a.value2

Кроме того, B и C должны преобразовать данные, чтобы использовать их.

b.sum -> b.value1 + b.value2
b.doSomething -> b.sum() ...

c.sum -> c.value1 + c.value2
c.doSomethingElse -> c.sum() ...

Чтобы избежать написания дублированного кода, мы перемещаем эти методы преобразования обратно в A.

a.sum -> a.value1 + a.value2

b.doSomething -> a.sum() ...
c.doSomethingElse -> a.sum() ...

Но это означает, что B и C теперь зависят от A, а не только от его данных.

A -> B -> A
  -> C -> A

И это приводит к круговой зависимости.

Я изучал внедрение зависимостей и шаблон фабрики, и эти две идеи решили множество проблем, но я не понимаю, как создать граф объектов чьи узлы настраиваются во время выполнения.Другими словами, мне нужна возможность изменять поведение конкретного узла или группы узлов во время выполнения извне.Каков наилучший способ распространения состояния конфигурации по графу объектов?

Редактировать

Потратив последние пару часов на то, чтобы сформулировать свои мысли в вопрос, я думаю, что, возможно, наткнулся на решение.Я думаю, что мне нужно создать класс поставщика конфигурации. D который передается узлам, которые зависят от этой информации.

A -> B -> D
  -> C -> D
  -> D

Д справляется value1 и value2 и обеспечивает sum метод.В D также есть события, которые срабатывают при изменении значения 1 и значения 2, чтобы зависимые узлы (A, B и C) могли отреагировать на это изменение.

Я думаю, что это решение работает, но я все равно хотел опубликовать сообщение на случай, если найдется лучшее решение.Если это является образец, который я ищу, как он называется?Шаблон «поставщик»?(Не путать с ASP.NET. модель поставщика!)

Это было полезно?

Решение

вы ищете шаблон наблюдателя или посредника.проверьте это на http://sourcemaking.com/design_patterns/observer

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top