Это позволяет вам DataReader без необходимости знать, какой тип DataReader вы используете (то есть SqlDataReader, OleDbDataReader, EtcDataReader
), поэтому, если вы когда-нибудь захотите изменить используемый вами DataReader, это не повлияет на вашу логику, в других слова это дает вам абстракцию.
Например:
вы можете использовать
IDbCommand command = GiveMeSomeCommand();
IDataReader r = command.ExecuteReader();
, не зная, каким провайдером вы пользуетесь
это может быть:
private static IDbCommand GiveMeSomeCommand()
{
return new OleDbCommand();
}
или это может быть
private static IDbCommand GiveMeSomeCommand()
{
return new SqlCommand();
}
или что-то еще.
EDIT:
Вы также можете использовать DBFactories.
DbProviderFactory factory = GiveMeSomeFactory();
IDbCommand command = factory.CreateCommand();
IDataReader r = command.ExecuteReader();
//and create more objects
IDataAdapter adapter = factory.CreateDataAdapter();
IDbConnection conn = factory.CreateConnection();
, а затем создайте своего провайдера в другом слое
private DbProviderFactory GiveMeSomeFactory()
{
if(something)
return SqlClientFactory.Instance;
else if(somethingElse)
return OracleFactory.Instance;
else if(notThisAndNotThat)
return MySqlFactory.Instance;
else
return WhateverFactory.Instance;
}