Desenvolvimento - C#
Desenvolvendo com camadas utilizando C Sharp
Veja neste artigo como desenvolver software em camadas utilizando C# e Visual Studio 11 beta. Hoje existem vários padrões de desenvolvimento, inclusive você pode fazer o seu próprio modelo de desenvolvimento.
por Mauricio JuniorCaro(a) Leitor(a), hoje vou falar um pouco como desenvolver software em camadas utilizando C# e Visual Studio 11 beta. Hoje existem vários padrões de desenvolvimento, inclusive você pode fazer o seu próprio modelo de desenvolvimento.
Mas para não ficar muito diferente dos demais, foram criados alguns padrões e esses podem ser utilizados em qualquer linguagem ou ferramenta de desenvolvimento. É importante dizer que, você pode escolher a forma que deseja trabalhar ou padronizar. Eu vou mostrar aqui a maneira que é mais utilizada dentre os desenvolvedores, talvez mude apenas o nome mas o princípio é o mesmo.
Você tem hoje várias possibilidades de acessar a internet utilizando dispositivos móveis, computador, pocket PC, smartphone, TV, notebook e tablets. Essas interfaces podem ser mudadas de acordo com a necessidade de cada um, mas o que funciona por baixo não precisa ser alterado (em tese) se for feito em camadas.
Quero dizer que a mesma camada, por exemplo: a camada de acesso a dados pode ser usada por qualquer dispositivo citado anteriormente.
Junto das camadas, existe também a passagem de parâmetro do tipo padronizado, por exemplo: em vez de passar parâmetro por parâmetro, basta passar uma classe com Get e Set (cheio de propriedades) prefixadas.
Vamos para a prática. O primeiro passo é, vamos criar as pastas dentro do projeto. Figura 1.
Figura 1: Criando pastas
Para criar as pastas, cliquei com o botão direito em cima do projeto e comecei a criar as pastas específicas de Code>> BLL>> DAL>> DTO. Figura 2.
Figura 2: Pastas criadas
Note que dentro da pasta Code existem as outras funcionando como siglas. BLL>> DAL>> DTO.
BLL significa Business Logic Layer, responsável pela camada de regra de negócio. A pasta DAL significa Data Access Layer, responsável pela camada de acesso a dados, como acesso ao banco de dados. É importante dizer que o banco de dados pode ser qualquer um. Dependendo da maneira que você cria a sua camada de acesso a dados, a qualquer momento o seu banco de dados pode ser alterado e a sua camada de conexão não precisará alterar uma linha de código.
Isso porque essa camada pode ter drives para todos os bancos de dados existentes de uma maneira simples.
Depois de criar as pastas, vamos criar as classes específicas. Lembro que hoje não vou aprofundar muito no código, só vou mostrar como criar.
DTO
Eu sempre começo pela DTO que na verdade é praticamente um espelho da tabela de banco de dados. Figura 3.
Figura 3: Criando uma classe DTO.
Note que coloquei o nome da classe chamada ClienteDTO.cs. Depois de colocar o nome da classe cliquei no botão chamado ADD. A minha tabela do banco de dados tem o nome de Cliente e possui alguns campos como: Id, Nome, Email, Endereço, Cidade, Estado, Senha. Listagem 1.
Listagem 1: Classe ClienteDTO.
[Code] public class ClienteDTO { int _id; String _nome; String _endereco; String _email; String _cidade; String _estado; String _senha; public String Senha { get { return _senha; } set { _senha = value; } } public String Estado { get { return _estado; } set { _estado = value; } } public String Cidade { get { return _cidade; } set { _cidade = value; } } public String Email { get { return _email; } set { _email = value; } } public String Endereco { get { return _endereco; } set { _endereco = value; } } public String Nome { get { return _nome; } set { _nome = value; } } public int Id { get { return _id; } set { _id = value; } } }Note que na classe eu tenho todos os get e set dos meus campos das tabelas. Em artigos passados mostrei como gerar esses get e sets usando tecla de atalho.
DAL
O próximo passo foi criar uma classe DAL responsável por buscar no banco de dados. Listagem 2.
Listagem 2: ClienteDAL.cs
public class ClienteDAL { internal void selectCliente(ClienteDTO dto) { //acesso ao banco de dados //select passando os parâmetro dto StringBuilder str = new StringBuilder(); str.Append(@" SELECT campos FROM Cliente WHERE campo = @valor "); string valor = dto.Email; } }
Note que o meu método recebe como parâmetro a minha classe chamada ClienteDTO. Qualquer campo que quiser da minha classe basta clicar dto e digitar ponto que aparece todas as propriedades.
BLL
Para finalizar, vamos criar a classe BLL responsável pela regra de negócio e acesso único a camada DAL. Nenhuma outra classe acessa a DAL a não ser a BLL. Lembro que a sua interface web, form ou móvel acessa apenas a BLL onde tem toda regra de negócio.
A camada BLL é responsável por acessar a DAL e tratar erro. Veja como ficou o código da classe ClienteBLL.cs. Listagem 3.
Listagem 3: ClienteBLL.cs chamando a classe DAL.
public class ClienteBLL { protected ClienteDAL _clienteDAL; public ClienteBLL() { if (_clienteDAL == null) _clienteDAL = new ClienteDAL(); } public void selectCliente(ClienteDTO dto) { try { _clienteDAL.selectCliente(dto); } catch (Exception ex) { //fazendo tratamento de erro tratarErro(ex); //jogando o erro para a camada superior. throw ex; } } }
O primeiro passo foi criar a variável protegida da classe DAL. No construtor do método BLL verifiquei se alguém está utilizando a classe se houver ele não gera uma nova instância. Depois criei o método do tipo público passando como parâmetro a classe DTO de cliente.
Dentro do método selectCliente chamei a variável criada anteriormente e quando digitei o ponto, a ferramenta já me mostrou os métodos disponíveis. Só selecionei e passei a dto como parâmetro.
Note que na DAL não existe o try e catch para pegar erro se houver. O tratamento de erro é feito dentro da BLL. Veja como ficou as classes geradas. Figura 4.
Figura 4. Classes geradas
Cada classe com seu respectivo nome e responsabilidade. Bom, espero que tenha gostado e em artigos futuros falo mais sobre cada classe.