Domanda

Sto cercando di evitare di creare un Classe Monster < / a>, e ho notato un modello non così buono ed era curioso se qualcuno avesse alcuna intuizione di questo problema.

problema

A è complesso. Per evitare il "oggetto dio", parte della logica viene spinta in B e C.

A ora funge da Facciata . Dipende da B e c.

A -> B
  -> C
.

Tuttavia, A ha i dati di configurazione che hanno bisogno di B e C. Quindi dobbiamo mantenere i dati in sincronia.

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

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

Inoltre, B e C deve convertire i dati per usarlo.

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

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

Per evitare di scrivere codice duplicato, spostiamo questi metodi di conversione a A.

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

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

Ma questo significa che B e C ora dipendono da un, non solo i suoi dati.

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

E questo si traduce in una dipendenza circolare.

Ho studiato iniezione di dipendenza e il modello di fabbrica, e queste due idee hanno risolto molti problemi, ma sono cercato su come creare un grafico oggetti i cui nodi sono configurabili in runtime. In altre parole, ho bisogno della possibilità di cambiare il comportamento di un nodo specifico o di un gruppo di nodi in fase di esecuzione dall'esterno. Qual è il modo migliore per propagare lo stato di configurazione lungo un grafico oggetto?

modifica

Dopo aver trascorso le ultime un paio d'ore di cercare di formulare i miei pensieri in una domanda, penso che potrei essere inciampato in una soluzione. Penso che quello che devo fare è creare un generatore di classe di configurazione D che viene trasmesso nei nodi che dipendono da queste informazioni.

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

D gestisce value1 e value2 e fornisce il metodo sum. D ha anche eventi che sparano quando il valore1 e il valore2 cambiano in modo che i nodi dipendenti (A, B e C) possano rispondere al cambiamento.

Penso che questa soluzione funzioni, ma volevo pubblicare comunque nel caso in cui ci sia una soluzione migliore. Se questo è il modello che sto cercando, cosa si chiama? Il modello "fornitore"? (Da non confondere con ASP.NET Modello del provider !)

È stato utile?

Soluzione

Stai cercando un modello di osservatore o mediatore.Dai un'occhiata a http://sourcemaking.com/design_patterns/observer

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top