Pregunta

Estoy tratando de evitar la creación de un monstruo de la clase, y me di cuenta de un no tan buen patrón y tenía curiosidad por si alguien tenía alguna información sobre este problema.

Problema

A es complejo.Para evitar el "dios de objeto", la lógica es empujado a B y C.

Ahora sirve como un fachada.Depende de B y C.

A -> B
  -> C

Sin embargo, Una tiene los datos de configuración que B y C necesitan.Así que tenemos que mantener sincronizados los datos.

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

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

También, B y C deben convertir los datos a utilizar.

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

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

Para evitar escribir código duplicado, nos movemos estos métodos de conversión de regreso a la A.

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

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

Pero esto significa que B y C dependen en la actualidad de Una, no sólo de sus datos.

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

Y esto se traduce en una dependencia circular.

He estado estudiando la inyección de dependencia y el patrón de fábrica, y estas dos ideas han resuelto muchos problemas, pero estoy perplejo sobre cómo crear un objeto gráfico cuyos nodos son configurables en tiempo de ejecución.En otras palabras, tengo la capacidad de cambiar el comportamiento de un determinado nodo o grupo de nodos en tiempo de ejecución desde el exterior.¿Cuál es la mejor forma de propagar el estado de configuración de un objeto gráfico?

Editar

Después de haber pasado el último par de horas tratando de formular mis pensamientos en una pregunta, yo creo que puede haber caído en una solución.Creo que lo que necesitas hacer es crear una configuración de clase de proveedor de D que pasa en los nodos que dependen de esta información.

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

D administra value1 y value2 y proporciona la sum método.D también tiene eventos que se desencadenan cuando value1 y value2 cambio, de modo que dependen de nodos (a, B y C) pueden responder al cambio.

Creo que esta solución funciona, pero yo quería post de todos modos en caso de que haya una solución mejor.Si esta es el modelo que estoy buscando, cómo se llama?El "proveedor" patrón?(No debe confundirse con ASP.NET's modelo de proveedor!)

¿Fue útil?

Solución

estás buscando el observador o modelo de mediador.échale un vistazo a este http://sourcemaking.com/design_patterns/observer

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top