Nó cho phép bạn DataReader mà không cần biết loại DataReader nào bạn đang sử dụng (tức là SqlDataReader, OleDbDataReader, EtcDataReader
), vì vậy nếu một ngày nào đó bạn muốn thay đổi trình quản lý dữ liệu bạn đang sử dụng sẽ không ảnh hưởng đến logic của bạn, nói cách khác nó cho bạn trừu tượng. Ví dụ:
bạn có thể sử dụng
IDbCommand command = GiveMeSomeCommand();
IDataReader r = command.ExecuteReader();
mà không biết trong đó cung cấp bạn đang sử dụng
nó có thể là:
private static IDbCommand GiveMeSomeCommand()
{
return new OleDbCommand();
}
hoặc nó có thể được
private static IDbCommand GiveMeSomeCommand()
{
return new SqlCommand();
}
hoặc bất kỳ thứ gì.
EDIT:
Bạn cũng có thể sử dụng DBFactories.
DbProviderFactory factory = GiveMeSomeFactory();
IDbCommand command = factory.CreateCommand();
IDataReader r = command.ExecuteReader();
//and create more objects
IDataAdapter adapter = factory.CreateDataAdapter();
IDbConnection conn = factory.CreateConnection();
và sau đó tạo ra cung cấp dịch vụ của bạn trong lớp khác
private DbProviderFactory GiveMeSomeFactory()
{
if(something)
return SqlClientFactory.Instance;
else if(somethingElse)
return OracleFactory.Instance;
else if(notThisAndNotThat)
return MySqlFactory.Instance;
else
return WhateverFactory.Instance;
}
Nguồn
2009-02-04 13:12:42
tôi đang học giao tiếp và có câu hỏi chính xác như vậy. Câu trả lời của Pablito chính xác là những gì tôi đang tìm kiếm và xác nhận rằng tôi đang xây dựng triển khai của mình một cách chính xác. Cảm ơn các bạn!! –