Метод возвращает интерфейс
Привет Всем,
Я думаю в этой строке кода
IDataReader myReader = questDatabase.ExecuteReader(getQuest);
Я использую DAAB, но я не могу понять, как и что означает тот факт, что метод ExecuteReader(DbCommand) возвращает интерфейс IDataReader.
кто-нибудь может объяснить, пожалуйста
6 ответов
это позволяет вам 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;
}
метод вернет объект, который является экземпляром класса, и этот тип класса будет поддерживать IDataReader
.
дело в том, что тип объекта не важен, просто тот факт, что класс реализует интерфейс.
Если вы за рулем автомобиля, вам не нужно знать, является ли это ford или toyota, вы ведете машину так же.
управляя интерфейс это то же самое, как только автомобиль поддерживает интерфейс, вы можете управлять он.
Дитто с IDataReader
, Как только возвращаемый класс поддерживает интерфейс, вы можете его использовать.
он возвращает интерфейс, потому что реализация интерфейса не важна, просто API, который предоставляет интерфейс.
"возвращает интерфейс" на самом деле означает:
возвращает экземпляр некоторого класса, который реализует этот интерфейс
в этом случае он возвращает объект очень похож на SqlDataReader
объект, который позволяет выполнять такие методы, как Read()
и осуществляет IDisposable
и IDataRecord
интерфейсы.
она возвращает объект, который реализует этот конкретный интерфейс, и это все, что тебя волнует. Объект является IDataReader
и может выполнять все методы IDataReader
есть.