Sto designando un'architettura che utilizza alcuni oggetti differenti controller
che implementano un'interfaccia abstract_controller
.
Il loro obiettivo è incapsulare l'uso di alcuni dati.
Alcune fabbriche sono responsabili della creazione e inizializzazione dei controller.
Alcuni controllers
potrebbero aver bisogno di un altro controllers
, e ogni controllers
utilizzato ha bisogno di alcune informazioni dal database, specialmente alla prima esecuzione.
Nb: nella mia applicazione, i clienti devono conoscere i cataloghi da cui possono ordinare.
Ad esempio, se su un'esecuzione ho bisogno di usare client_controller
, client
sono creati da client_factory
(e in qualche modo fornito), ma in questo caso devo essere in grado di fornire informazioni su catalogs
e inizializza il mio catalog_controller
(e così via).
Quindi, qui ci sarebbero solo tre dipendenze:
-
client
dipende dai dati nel database. -
client
dipende dacatalogs
-
catalog
dipende dai dati nel database. (supponendo che questa sia l'unica dipendenza dicatalog_controller
)
Quali sono le opzioni per indicare che xxx_controller
richiede yyy_controller
o anche zzz_knowledge
?
Nella prima volta ho pensato di creare un'interfaccia requires_xxx_controller
corrispondente con un predicato, ma a quel punto sembra che dovrei creare un'interfaccia per ogni controller
, e quindi non sarebbe davvero estensibile.
La mia prossima idea era di creare requirement
e has_requirements
interfaccia, rendere controller
, database_information
(e alcuni altri tipi) implementare requirement
e controller has_requirements
restituirebbe l'elenco delle dipendenze che ha, che conserverei in un set ordinato, ordinato per ordine di inserzione, (che fortunatamente esiste in boost
), ma anche allora, sarei obbligato a trovare una soluzione per restituire una collezione di quei requirements
che non posso costruire.
Quali difetti sto esponendo a questi casi? Esiste una soluzione comunemente accettata per questo problema?
Dubito che cambi qualcosa di grande, ma c++
è la lingua utilizzata in questa applicazione.