Projeto de construção do objeto

5

Comecei recentemente a usar o c # para fazer interface com um banco de dados, e havia uma parte do processo que parecia estranha para mim. Ao criar um SqlCommand, o método para o qual fui conduzido assumiu a forma:

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

Vindo de um plano de fundo do Java, esperava algo mais semelhante a

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

Estou perguntando, em termos de design, qual é a diferença entre os dois? A frase "responsabilidade única" foi usada para sugerir que uma conexão não deveria ser responsável pela criação de SqlCommands, mas eu também diria que, na minha opinião, a diferença entre os dois é em parte uma diferença entre uma conexão executando um comando e um comando agindo em uma conexão, o último dos quais parece menos com o que eu tenho sido levado a acreditar que OOP deveria ser. Há também uma parte de mim perguntando se os dois devem ser completamente separados, e devem se unir em algum tipo de método connection.execute(command) . Alguém pode ajudar a esclarecer essas diferenças? Algum desses métodos é "mais correto" do que os outros de um ponto de vista OO?

(P.S. o fato de que c # é usado é completamente irrelevante. Apenas destacou para mim que diferentes abordagens foram usadas)

    
por James 11.09.2012 / 13:16
fonte

1 resposta

5

Como os comandos são inúteis sem conexões, o fato de que a criação de comandos está relacionada a uma instância da conexão faz sentido.

Por favor, note que, além do construtor de SqlCommand , existe um método chamado CreateConnection em todas as instâncias de IDbConnection , permitindo criar um comando" estilo Java ":

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

Esse código funciona com qualquer RDBMS, não apenas o SQL Server, porque uma conexão do Oracle criaria um comando do Oracle, uma conexão do Sql Server criaria um comando do SQL Server e assim por diante.

O padrão é chamado de Método de fábrica , é fundamental para você programa para uma interface .

    
por 11.09.2012 / 13:30
fonte