Pergunta

Estou tentando evitar criar um classe monstro, e notei um padrão não tão bom e fiquei curioso para saber se alguém tinha alguma ideia sobre esse problema.

Problema

A é complexo.Para evitar o “objeto deus”, parte da lógica é empurrada para B e C.

A agora serve como fachada.Depende de B e C.

A -> B
  -> C

No entanto, A possui dados de configuração que B e C precisam.Portanto, temos que manter os dados sincronizados.

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

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

Além disso, B e C devem converter os dados para usá-los.

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

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

Para evitar escrever código duplicado, movemos esses métodos de conversão de volta para A.

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

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

Mas isso significa que B e C agora dependem de A, não apenas de seus dados.

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

E isso resulta em uma dependência circular.

Tenho estudado injeção de dependência e padrão de fábrica, e essas duas ideias resolveram muitos problemas, mas não sei como criar um gráfico de objeto cujos nós são configuráveis ​​em tempo de execução.Em outras palavras, preciso da capacidade de alterar externamente o comportamento de um nó ou grupo de nós específico em tempo de execução.Qual é a melhor maneira de propagar o estado de configuração em um gráfico de objeto?

Editar

Depois de passar as últimas horas tentando formular meus pensamentos em uma pergunta, acho que encontrei uma solução.Acho que o que preciso fazer é criar uma classe de provedor de configuração D que é passado para os nós que dependem dessas informações.

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

D gerencia value1 e value2 e fornece o sum método.D também possui eventos que são acionados quando o valor1 e o valor2 mudam para que os nós dependentes (A, B e C) possam responder à mudança.

Acho que essa solução funciona, mas queria postar mesmo assim, caso haja uma solução melhor.Se este é o padrão que procuro, como se chama?O padrão "provedor"?(Não deve ser confundido com o ASP.NET modelo de provedor!)

Foi útil?

Solução

você está procurando um padrão de observador ou mediador.confira em http://sourcemaking.com/design_patterns/observer

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top