Escolar Documentos
Profissional Documentos
Cultura Documentos
0 Curtiram
... SHARES
Compartilhe!
Como eu já
mostrei o que você precisa fazer para poder realizar a conexão com o PostGreSQL,
não vou repetir tudo novamente. Vou focar na construção de uma aplicação
usando as boas práticas e padrões de projeto com ADO .NET.
Para este
artigo, eu criei uma tabela chamada alunos no PostGreSQL com a seguinte
estrutura usando pgAdmin:
Parece bem simples, mas vamos mostrar como fazer isso criando uma aplicação
onde iremos separar a interface da camada de acesso a dados e criarmos também uma
camada de negócio e de entidades. Acompanhe…
Mesmo para aplicações simples, eu recomendo que você sempre utilize as boas
práticas, e a separação da camada de interface do acesso aos dados é uma delas.
Antes de iniciar, quero deixar claro que esta não é a única forma de você criar uma
aplicação em camadas; você pode simplificar ou refinar o exemplo mostrado neste
artigo de acordo com suas necessidades. Eu já publiquei diversos artigos sobre esse
assunto e se você compará-los verá que, mesmo o assunto sendo o mesmo, ele é tratado
de forma um pouco diferente em cada artigo, isso para que você veja as opções
disponíveis e possa incorporar a que melhor se ajusta ao seu caso.
Temos, então, que criar uma aplicação ASP .NET, que neste artigo irá usar WebForms,
mas poderíamos usar MVC também.
Esse seria o caminho padrão para conseguir o nosso objetivo, bastava agora colocar o
controle na página Default.aspx e no code-behind inserir o código para realizar o acesso
ao banco de dados, obter os dados da tabela e exibir no controle GridView. Isso nós já
fizemos no meu artigo citado no início.
Vamos criar uma aplicação mais robusta em camadas com a seguinte estrutura:
Deveremos ter, então, uma solução com 4 projetos, onde o primeiro projeto,
EscolaWeb, já foi criado. Vamos criar os demais…
No menu File selecione Add e a seguir New Project.
Ao final, a nossa janela Solution Explorer deverá exibir uma solução com 4 projetos
conforme a figura abaixo:
Após criar a estrutura da solução, temos que pensar como os projetos irão se relacionar
entre si. Estamos criando camadas em projetos distintos, de forma a separar as
responsabilidades de cada camada e, dessa forma, a camada de apresentação não deverá
saber nada da camada de acesso a dados. Com isso em mente, teremos a seguinte
hierarquia de relacionamento entre os projetos:
Ou seja:
Isso pode ser visto clicando com o botão direito do mouse na Solução e selecionando o
item Project Dependencies:
Observe que a camada (projeto) Entidades deverá ser referenciado nos demais projetos.
Abra o projeto Entidades e renomeie a classe Class1.cs criada por padrão para Aluno.cs
e defina esse arquivo o seguinte código:
using System;
using System.Collections.Generic;
using System.Text;
namespace Macoratti.Entidades
{
public class Aluno
{
public Aluno() { }
public int Alunoid { get; set; }
public int Turmaid { get; set; }
public string Apelido { get; set; }
public string Nome { get; set; }
public string Email { get; set; }
public char Sexo { get; set; }
public Aluno(int alunoid, int turmaid, string apelido, string
nome, string email, char sexo)
{
this.Alunoid = alunoid;
this.Turmaid = turmaid;
this.Apelido = apelido;
this.Nome = nome;
this.Email = email;
this.Sexo = sexo;
}
}
}
Essa classe servirá como um transporte de dados (DTO-Data Transfer Objects) entre as
camadas, pois, como veremos mais à frente, iremos trabalhar com o objeto Aluno para
obter informações da tabela do banco de dados.
Lembrando que para cada entidade de negócio teremos uma classe que a represente e,
no momento, temos somente a tabela alunos e a entidade Aluno.
Definindo o código da camada de Acesso a dados
using System;
using System.Collections.Generic;
namespace Macoratti.DAL
{
public interface IAcessoDadosObject <T> where T : new()
{
T Get<K>(K id);
List<T> GetTop();
void Insert(T obj);
void Update<K>(K id, T obj);
void Delete<K>(K id);
}
}
Essa interface define a assinatura dos métodos para obter e atualizar informações na
tabela alunos usando Generics. Observe que estamos tipando a interface de forma
genérica e os métodos serão usados pelas demais classes.
A classe DALHelper poderá conter os métodos que você achar necessário para acessar
tabelas e banco de dados e tratar conexões.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using Npgsql;
namespace Macoratti.DAL
{
public class DALHelper
{
string server = "localhost";
string port = "5432";
string database = "macoratti";
string userId = "macoratti";
string userPassword = "numsey";
public NpgsqlConnection conexaoBD { get; set; }
public string stringConexaoBD { get; set; }
public DALHelper()
{
this.stringConexaoBD =
string.Format("Server={0};Port={1};Database={2};User
Id={3};Password={4};",
A classe DALHelper é uma classe que nos auxilia a realizar consultas e operações
CRUD na base de dados. Ele possui a definição da variáveis usadas na conexão com o
banco de dados e os métodos:
Construtores DALHelper – criam e retornam uma conexão com base em uma string de
conexão padrão ou fornecida;
OpenConnection – abre uma conexão;
CloseConnection – fecha uma conexão;
ExecuteDataReader – retorna um datareader.
Observe que essa classe usa os namespaces System.Data e NpgSql, que dá acesso as
classes ADO .NET e ao conector Npgsql, que dá acesso às classes dos provedores para
acesso ao banco de dados PostgreSql (Lembre-se que você tem que referenciar a library
do conector Npgsql nesse projeto).
Como para esse momento eu vou precisar somente acessar os dados da tabela, somente
vou definir o código completo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Npgsql;
using Macoratti.Entidades;
namespace Macoratti.DAL
{
public class AlunoDAL : IAcessoDadosObject<Aluno>
{
private DALHelper dal = new DALHelper();
public Aluno Get<K>(K id)
{
throw new NotImplementedException();
}
public List<Aluno> GetTop()
{
List<Aluno> alunos = new List<Aluno>();
NpgsqlDataReader reader = null;
try
{
string query = "select * from alunos";
dal.OpenConnection();
reader = dal.ExecuteDataReader(query);
while (reader.Read())
{
Aluno aluno = new Aluno();
aluno.Turmaid =
Convert.ToInt32(reader["turmaid"]);
aluno.Apelido = reader["apelido"].ToString();
aluno.Email = reader["email"].ToString();
aluno.Nome = reader["nome"].ToString();
aluno.Sexo = Convert.ToChar(reader["sexo"]);
alunos.Add(aluno);
}
reader.Close();
}
finally
{
if (reader != null)
{
reader.Close();
}
this.dal.CloseConection();
}
return alunos;
}
public void Insert(Aluno oAluno)
{
throw new NotImplementedException();
}
public void Update<K>(K id, Aluno oAluno)
{
throw new NotImplementedException();
}
public void Delete<K>(K id)
{
throw new NotImplementedException();
}
}
}
Na continuação deste artigo irei definir a camada de Negócios, onde estarei usando o
padrão Factory e Facade para, em seguida, poder exibir os dados na camada de
interface. Aguarde a continuação do artigo!
Eu sei é apenas, ASP .NET com boas práticas e padrões de projeto, mas eu gosto…
ASP .NET – Acessando PostGreSQL em
camadas e com padrões de projeto –
Parte 02
PorJosé Carlos Macoratti em 21/10/2010
0 Curtiram
... SHARES
Compartilhe!
O arquivo FactoryDAO.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Macoratti.DAL;
namespace Macoratti.BLL
}
O padrão Factory fornece uma interface para a
criação de famílias de objetos correlatos ou dependentes sem a necessidade de
especificar a classe concreta desses objetos.
O arquivo Facade.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Macoratti.DAL;
namespace Macoratti.BLL
public Facade()
_alunoDAL = FactoryDAO.CreateAlunoDAL();
Em padrões
de projeto, um façade (fachada, em francês) é um objeto que
disponibiliza uma interface para uma grande quantidade de funcionalidades de
uma API, por exemplo. Um façade pode:
O arquivo AlunoFacade.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Macoratti.DAL;
using Macoratti.Entidades;
namespace Macoratti.BLL
{
public partial class Facade
{
public void InserirAluno(Aluno aluno)
{
this._alunoDAL.Insert(aluno);
}
A camada de interface com o usuário será uma aplicação ASP .NET e estará no
projeto EscolaWeb representado pelo arquivo Default.aspx.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Macoratti.BLL;
using Macoratti.Entidades;
namespace Escolaweb
//exibindo-os no GridView
GridView1.DataSource =
_alunoFacade.GetTopAluno().ToList();
GridView1.DataBind();
}
No código acima, criamos uma instância da classe Facade e em seguida, no
evento Load da página web, chamamos o método GetTopAluno(), definido
na camada de negócios; esse método, por sua vez, chama o método GetTop() da
camada de acesso a dados, que retorna uma lista de objetos alunos.
Antes de executar o projeto, não se esqueça de definir o projeto EscolaWeb como Set
As Startup
Project e a página Default.aspx como Set As Startup Page.
Feito isso, basta rodar a solução que iremos obter o seguinte resultado: