Le permite DataReader sin la necesidad de saber qué tipo de DataReader está utilizando (es decir, SqlDataReader, OleDbDataReader, EtcDataReader
), por lo que si algún día quiere cambiar el lector de datos que está utilizando no le afectará la lógica, en otras palabras te da abstracción. Por ejemplo:
puede utilizar
IDbCommand command = GiveMeSomeCommand();
IDataReader r = command.ExecuteReader();
sin saber qué proveedor está utilizando
puede ser:
private static IDbCommand GiveMeSomeCommand()
{
return new OleDbCommand();
}
o puede ser
private static IDbCommand GiveMeSomeCommand()
{
return new SqlCommand();
}
o lo que sea.
EDIT:
También puede utilizar los DBFactories.
DbProviderFactory factory = GiveMeSomeFactory();
IDbCommand command = factory.CreateCommand();
IDataReader r = command.ExecuteReader();
//and create more objects
IDataAdapter adapter = factory.CreateDataAdapter();
IDbConnection conn = factory.CreateConnection();
y luego crear su proveedor en otra capa
private DbProviderFactory GiveMeSomeFactory()
{
if(something)
return SqlClientFactory.Instance;
else if(somethingElse)
return OracleFactory.Instance;
else if(notThisAndNotThat)
return MySqlFactory.Instance;
else
return WhateverFactory.Instance;
}
estoy aprendiendo las interfaces y tenía exactamente la misma pregunta. La respuesta de Pablito fue exactamente lo que estaba buscando y confirmó que estaba construyendo mi implementación correctamente. ¡¡Gracias chicos!! –