Progetto costruttivo oggetto

5

Recentemente ho iniziato a usare c # per interfacciare con un database, e c'era una parte del processo che mi sembrava strana. Durante la creazione di un SqlCommand, il metodo che ho portato a prendere il modulo:

SqlCommand myCommand = new SqlCommand("Command String", myConnection);

Provenendo da uno sfondo Java, mi aspettavo qualcosa di più simile a

SqlCommand myCommand = myConnection.createCommand("Command String");

Sto chiedendo, in termini di design, qual è la differenza tra i due? L'espressione "singola responsabilità" è stata usata per suggerire che una connessione non dovrebbe essere responsabile della creazione di SqlCommands, ma direi anche che, a mio avviso, la differenza tra i due è in parte mentale rispetto alla differenza tra una connessione in esecuzione un comando e un comando che agiscono su una connessione, l'ultimo dei quali sembra meno simile a quello che sono stato portato a credere che OOP dovrebbe essere. C'è anche una parte di me che si chiede se i due debbano essere completamente separati e dovrebbero riunirsi solo in una sorta di metodo connection.execute(command) . Qualcuno può aiutare a chiarire queste differenze? Alcuni di questi metodi sono "più corretti" rispetto agli altri da un punto di vista OO?

(P.S. il fatto che c # sia usato è completamente irrilevante. Mi ha appena evidenziato che sono stati usati approcci diversi)

    
posta James 11.09.2012 - 13:16
fonte

1 risposta

5

Poiché i comandi sono inutili senza connessioni, il fatto che la creazione di comandi sia correlata a un'istanza della connessione ha senso.

Si noti che oltre al costruttore di SqlCommand esiste un metodo chiamato CreateConnection su tutte le istanze di IDbConnection che ti consentono di creare un comando" Java-style ":

IDbCommand myCommand = myConnection.CreateCommand();
myCommand.CommandText = "select * from mytable";

Questo codice funziona con qualsiasi RDBMS, non solo con SQL Server, perché una connessione Oracle creerebbe un comando Oracle, una connessione Sql Server creerebbe un comando SQL Server e così via.

Il pattern è chiamato Metodo di fabbrica , è fondamentale per permetterti programma su un'interfaccia .

    
risposta data 11.09.2012 - 13:30
fonte

Leggi altre domande sui tag