Voltar

Por que eu devo ler este artigo:Neste artigo aprenderemos como desenvolver um controle de acesso e cadastro de usuários orientado a objetos, separando o sistema em três camadas lógicas, a camada de lógica de negócios, a camada de acesso a dados e a camada de visualização.

Veremos qual a maneira correta delas interagirem entre si no desenvolvimento de um sistema e também veremos várias boas práticas de orientação a objetos, tanto em nossas classes de negócio e acesso a dados, quanto nos formulários Delphi, onde muitas vezes deixamos isto de lado. Aprenderemos a utilizar exceções da maneira correta.

Veremos como podemos criar formulários que obedecem aos principais princípios de orientação a objetos, sem deixarmos de aproveitarmos o RAD que o Delphi nos proporciona.

O Delphi é uma linguagem de programação, um IDE e um compilador. No que diz respeito a linguagem, ela implementa todos os requisitos de uma linguagem orientada a objetos, nos permite fazer abstração, encapsulamento, herança e polimorfismo.

A linguagem tem a característica de ser multiparadigma, ou seja, tem suporte a mais de um paradigma de programação (BOX 1), sendo possível o desenvolvimento estruturado e orientado a objetos. O que ocorre é a programação mista destes dois estilos de desenvolvimento.

Porém, o que mais vemos nos desenvolvedores Delphi é o desenvolvimento de aplicações de forma estruturada, onde são explorados apenas os recursos RAD que o IDE nos proporciona, e que são excelentes, sem dúvida, mas não são tudo no desenvolvimento de um sistema, devemos levar em consideração diversos outros aspectos não somente na agilidade de desenvolvimento.

Outro grande problema encontrado em sistemas escritos em Delphi é a mistura de lógica de negócios, lógica de acesso a dados e interface com usuário, onde estas geralmente estão totalmente acopladas, tornando extremamente difícil a manutenção dos sistemas e tornando o sistema vulnerável.

BOX 1. Paradigmas de Programação

Paradigmas de Programação representam um modelo ou estilo de programação suportado por linguagens que agrupam certas características comuns. Os mais conhecidos são a programação funcional (Lisp e Haskell), programação estruturada (Pascal e C), programação orientada a objetos (C# e Java). Outras ainda possuem suporte a múltiplos paradigmas (PHP, Delphi).

SQL Server Express

Para o desenvolvimento do exemplo contido neste artigo, faremos uso do banco de dados da Microsoft SQL Server Express, que é um sistema de gerenciamento de banco de dados desenvolvido pela Microsoft muito avançado, gratuito e confiável. O SQL Server é um dos bancos de dados mais utilizados no mundo atualmente.

Para quem está acostumado a utilizar o Firebird uma vantagem do SQL Server é a possibilidade de criar campos auto incremento de forma nativa no banco de dados, sem a necessidade de utilização de Generators, Triggers e Stored Procedures, tornado mais simples o gerenciamento de campos auto incremento.

O SQL Server possui versões gratuitas e pagas sendo que a versão Express (gratuita) do banco de dados da Microsoft atende a grande maioria das necessidades dos desenvolvedores, sendo a versão paga voltada a grandes empresas que necessitam de recursos avançados e grande desempenho.

FireDAC

A tecnologia de acesso a dados que será utilizada é o FireDAC, que é uma suíte de acesso a dados que foi adquirida pela Embarcadero junto a UniDAC, e nos proporciona um grande número de classes e componentes de alta performance para atender as necessidades dos desenvolvedores no que diz respeito a banco de dados.

O FireDAC possui diversas vantagens e recursos interessantes como Live Data, Array DML, API Unificada, Tratamento de Erros Unificado, Arquitetura Simplificada, Restauração Automática de Conexão com a Base de Dados e Suporte a codificações ANSI e Unicode.

Novidades VCL

Na versão mais recente do Delphi, a versão XE6 trouxe melhorias em diversos pontos do IDE, incluindo a VCL. A VCL recebeu melhorias de performance e estabilidade.

Podemos, a partir desta versão, evoluir nossas aplicações Windows com novos componentes de sensor e termos interfaces com estilo do Windows 7/8 com novos estilos (incluindo menus e bordas) e componentes de barra de tarefa do Windows.

Com o novo recurso de Tethering (BOX 2) também podemos estender nossas aplicações através de aplicações Mobile, chamando ações de nossas aplicações VCL.

BOX 2. Tethering

Tethering é um novo recurso presente na versão Delphi XE6, onde é possível que aplicações de diferentes plataformas possam interagir diretamente, sem a necessidade de uma aplicação servidora intermediária, desde que estejam na mesma rede. Desta maneira podemos ter aplicações Desktop e Mobile interagindo e trocando dados.

Padrão DAO (Data Access Object)

O padrão de projeto DAO surgiu com a necessidade de separarmos a lógica de negócios da lógica de persistência de dados. Este padrão permite que possamos mudar a forma de persistência sem que isso influencie em nada na lógica de negócio, além de tornar nossas classes mais legíveis.

Classes DAO são responsáveis por trocar informações com o SGBD e fornecer operações CRUD e de pesquisas, elas devem ser capazes de buscar dados no banco e transformar esses em objetos ou lista de objetos, fazendo uso de listas genéricas (BOX 3), também deverão receber os objetos, converter em instruções SQL e mandar para o banco de dados.

Toda interação com a base de dados se dará através destas classes, nunca das classes de negócio, muito menos de formulários.

Se aplicarmos este padrão corretamente ele vai abstrair completamente o modo de busca e gravação dos dados, tornando isso transparente para aplicação e facilitando muito na hora de fazermos manutenção na aplicação ou migrarmos de banco de dados.

Também conseguimos centralizar a troca de dados com o SGBD (Sistema Gerenciador de Banco de Dados), teremos um ponto único de acesso a dados, tendo assim nossa aplicação um ótimo design orientado a objeto.

BOX 3. Generics (TList x TObjectList)

A Classe TList possibilita guardarmos coleções de qualquer tipo de dados, tanto primitivos quanto objetos. Já a classe TObjectList, que é uma especialização de TList pode armazenar somente objetos.

Ela tem a vantagem de no momento de liberarmos uma instância dela da memória, todos os objetos contidos nela também são liberados, diferentemente das instâncias de TList, onde precisamos liberar cada objeto individualmente da memória.

Mapeamento Objeto Relacional

Atualmente o tipo de banco de dados que predomina é o relac ...

Quer ler esse conteúdo completo? Tenha acesso completo