Scopri le implementazioni dell'interfaccia

0

Diciamo che ho un'interfaccia ISomething . Ho anche implementazioni dell'interfaccia dell'interfaccia n , ad esempio ASomething e BSomething . Voglio determinare tutte le implementazioni di tale interfaccia e salvarle in una lista o in un'altra struttura di dati utile.

Una soluzione che conosco è trovare tutte le implementazioni tramite una riflessione. La mia domanda è : è questo il modo migliore per farlo? Esiste un modello che ogni implementazione si registra sul sistema chiamando un metodo? Se sì, come si chiama? Man mano che il progetto cresce, il ciclo su tutte le classi solo due trova che le due implementazioni mi sembrano inefficienti.

Il linguaggio qui è vb.net ma la domanda si rivolge in generale ai linguaggi orientati agli oggetti.

Modifica: per essere un po 'più specifico sulla domanda.

Ho un'interfaccia utente che può creare progetti. In precedenza, questi progetti avevano dati diversi ma erano tutti dello stesso tipo. Generalmente un progetto viene generato copiando un file modello in una cartella e quindi riempiendo alcuni valori.

La situazione ora è che un progetto può essere di tipo A o tipo B . La differenza è che un file modello diverso viene copiato e anche altri dati vengono caricati in modo diverso. C'è anche la possibilità che in futuro ci possa essere il tipo C , ma non lo so ancora. La mia idea era la creazione di un'interfaccia e diverse implementazioni di questa interfaccia. L'interfaccia utente quindi, al caricamento, cerca tutte le implementazioni di tale interfaccia e offre all'utente una scelta tramite un menu a discesa o un controllo simile.

Ho pensato che quando un altro sviluppatore crea C , sarebbe bene se questa nuova funzionalità apparisse automaticamente nell'interfaccia utente senza che l'altro sviluppatore toccasse il codice per l'interfaccia utente. Speravo di evitare infinite catene if-else e volevo anche evitare una specifica esplicita di ciascun tipo di progetto.

Questa idea porta alla domanda sopra.

    
posta Freddy 12.04.2017 - 00:40
fonte

1 risposta

5

La risposta di "ingegneria del software" sarebbe "perché stai cercando di scoprire istanze di interfacce?"

In generale non è qualcosa che vorresti fare. Il codice dovrebbe specificare quale classe utilizzare per le varie interfacce. Altrimenti potresti prendere quello sbagliato. Ad esempio un mock usato nei test. O più in generale, ogni IDisposable nel .net framework.

Ora potresti scrivere un framework DI o qualcosa in cui sarebbe utile. Ma ce ne sono già tanti là fuori ...

Modifica in risposta ai dettagli extra:

Aggiungi le implementazioni A B e C a un dizionario e compilare il menu a discesa con la chiave della stringa.

Quando un utente seleziona il tipo di progetto, sarà possibile recuperare un'istanza del tipo corretto nel dizionario.

Se hai bisogno di nuove istanze, metti un semplice oggetto factory nel dizionario, così puoi farlo ...

IWhatever x = dict[key].CreateNew();
    
risposta data 12.04.2017 - 06:35
fonte

Leggi altre domande sui tag