Visual Studio .NET 2008

Olá pessoal, quero mostrar algumas coisas importantes no meio da programação. Hoje ficou muito comum falar de “interface” pra cá, “interface” pra lá. Mas pra que serve essa coisa de “interface” na programação?
Bom, nesse artigo vou explicar algumas coisas e mostrar alguns cĂłdigos de interface usando o framework da Microsoft.

ReferĂȘncia:
Ferramenta Visual Studio.NET
Linguagem C#.NET
Framework 3.5 / 2.0 / 1.x

A interface é geralmente tratada como uma camada de abstração, ou seja, uma cama acima que sabe identificar qual a melhor forma de acessar a fonte de dados, método ou função. Um exemplo båsico disso é: imagina criar uma interface que sabe qual banco de dados acessar; oracle, sql server, mysql, access ou outros.
VocĂȘ sĂł manda o comando e a interface detecta qual banco de dados estĂĄ na sua aplicação. O comando “select * from tabela” na interface; pega o dado para a camada de dados correta. Criei primeiro uma classe helper com o mĂ©todo principal. (ReferĂȘncia 1.1)

public DataSet ExecutaDataSetParameter(IDbCommand sqlCommand)
{
try
{
base.OpenConnection();
sqlCommand.Connection = sqlConnection;

System.Data.IDbDataAdapter dataAdapter = new System.Data.SqlClient.SqlDataAdapter();
dataAdapter.SelectCommand = sqlCommand;
DataSet dtSet = new DataSet();
dataAdapter.Fill(dtSet);
return dtSet;
}
catch(SqlException e)
{
throw new NotImplementedException(e.Message);

}
finally
{
base.CloseConnection();
}
}
ReferĂȘncia 1.1

O método executa um dado e retorna um objeto do tipo dataset. Recebe como parùmetro de entrada chamado IDbCommand, uma interface da classe Command. No decorrer do método utilizo sempre a interface de métodos, o DataAdapter por exemplo possui uma interface chamada IDbDataAdapter que recebe um objeto do tipo SqlDataAdapter().

Essa helper Ă© apenas para o banco de dados SQL Server. (ReferĂȘncia 1.2)


? ReferĂȘncia 1.2

Note na imagem que tenho uma HelperSQL.cs, tem todos os mĂ©todos especĂ­ficos para o banco de dados SQL Server. O prĂłximo passo Ă© gerar um helper para o Oracle. (ReferĂȘncia 1.3)

namespace Bancoob.Data {
public class HelperOracle : IDTec
{
public DataSet ExecutaDataSetParameter(IDbCommand sqlCommand)
{
try
{
System.Data.IDbDataAdapter dataAdapter = new System.Data.Odbc.OdbcDataAdapter();
dataAdapter.SelectCommand = sqlCommand;
DataSet dtSet = new DataSet();
dataAdapter.Fill(dtSet);
return dtSet;
}
catch (OdbcException e)
{ throw new NotImplementedException(e.Message);

}
}
}
}

ReferĂȘncia 1.3

Nesta classe HelperOracle.cs possui um mesmo mĂ©todo para um outro banco de dados, Oracle por exemplo. Para acessar o banco, o comando ODBC Ă© importante, em vez de fazer outro mĂ©todo na helper SQL, coloco na helper Oracle. Veja a mudança no System.Data.OdbcDataAdapter() , a Exception tambĂ©m Ă© do tipo Odbc. (ReferĂȘncia 1.4)


? ReferĂȘncia 1.4

O prĂłximo passo Ă© gerar uma interface que saiba qual classe Helper acessar em determinados momentos. Uma hora na HelperSQL e outra hora no HelperOracle. Geralmente a interface possui apenas o cabeçalho do mĂ©todo, por exemplo: note que na referĂȘncia 1.3 e 1.1 possui todo o mĂ©todo que recebe um comando e retorno o objeto do tipo DataSet; dessa forma, na interface fica apenas o cabeçalho que por sinal um Ă© igual ao outro. (ReferĂȘncia 1.4)

public DataSet ExecutaDataSetParameter(IDbCommand sqlCommand)

ReferĂȘncia 1.4

No caso de ter outra helper para acesso a outro banco como o access, terĂĄ a mesma assinatura e no seu interior irĂĄ tratar direto com o banco e interfaces do access. O passo seguinte Ă© mostrar a interface.

Na classe da interface nĂŁo terĂĄ public class e sim public interface. (ReferĂȘncia 1.5)

public interface IDTec
ReferĂȘncia 1.5

TerĂĄ apenas um public interface e o nome que achar melhor. Veja mais abaixo a chamada do mĂ©todo criado nas referĂȘncias acima. (ReferĂȘncia 1.6)

public interface IDTec {
DataSet ExecutaDataSetParameter(IDbCommand sqlCommand);
}
ReferĂȘncia 1.6

A interface possui apenas a chamada com o retorno do tipo do mĂ©todo, Ă© o mesmo tipo. Com isso a interface escolhe qual herper utilizar. VocĂȘ pode colocar um tipo na sua classe que chama para definir o helper de forma mais dinĂąmica; pode ser de acordo com o arquivo de configuração ou como uma propriedade com get e set.
No sistema, basta chamar a interface, ou seja, public interface IDTec que o resto Ă© definido dinamicamente.

Bom eu fico por aqui, qualquer dĂșvida pode entrar em contato. Espero ter ajudado.