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:
-
clientdipende dai dati nel database. -
clientdipende dacatalogs -
catalogdipende 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.