C'è un motivo per propagare lo stato di configurazione lungo un grafico dell'oggetto?
-
21-12-2019 - |
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 !)
Soluzione
Stai cercando un modello di osservatore o mediatore.Dai un'occhiata a http://sourcemaking.com/design_patterns/observer