Pattern di progettazione di fabbrica - ottenere i tipi da un tavolo

2

Ho implementato uno stabilimento generico come descritto qui

Ho bisogno di registrare elementi nel codice di fabbrica come questo:

Factory.Register(1, typeof(MyClass));

questo factory dovrà essere correlato con una semplice tabella dei tipi di dati di dominio [id, Display], in questo caso l'ID 1 è correlato a MyClass.

Stavo pensando di aggiungere una colonna a quel tavolo con il tipo qualificato, quindi posso semplicemente recuperare l'id per i tipi. la tabella sarà [id, Display, typeName]

e userò la fabbrica in questo modo:

Factory.Register(id, Type.GetType(typeName));

L'ho provato e funziona bene.

è un buon design?

ci sono dei difetti di sicurezza?

c'è un modo migliore di fare le cose?

    
posta Mithir 02.02.2012 - 14:22
fonte

2 risposte

2

Questo lega il design db al linguaggio di programmazione , che, a mio parere, è qualcosa che vorresti evitare.

Una semplice alternativa sarebbe quella di aggiungere una chiave alla tabella e avere un modo per mappare quella chiave per un tipo nel linguaggio di programmazione di tua scelta. Questa potrebbe non essere una soluzione così elegante in quanto potrebbe richiedere un'istruzione switch, ma è l'architettura migliore nonostante le carenze della mia implementazione suggerita. In questo modo se devi usare la tabella in un'altra lingua, sarai ok.

Per lo meno, aggiungi la chiave agnostica della lingua alla tabella corrente e aggiungi un riferimento incrociato al nome del tipo completo.

    
risposta data 02.02.2012 - 16:04
fonte
0

Per un modello di progettazione Factory è fondamentale che la conoscenza della mappatura tra un id e la classe corrispondente venga gestita solo dalla Factory. Invece nell'esempio dato sembra che il chiamante sia a conoscenza della mappatura. Vorrei incapsulare questa conoscenza all'interno del pattern Factory, codificato a macchina.

Se non vuoi che questa conoscenza sia hard-coded, cioè vuoi dare la mappatura dopo aver implementato la classe Factory, puoi fornire la mappatura come un file di configurazione e lasciare che la classe Factory usi la riflessione computazionale per gestire istanza della classe il cui nome è dato come una stringa nel file.

    
risposta data 08.02.2012 - 13:42
fonte

Leggi altre domande sui tag