Separe e esconda. A OO diz que devemos encapsular o que muda. Isso fará com que um uma mudança no sistema, por exemplo, em um requisito, na arquitetura da solução, nas tecnologias envolvidas, no banco de dados, no tipo de interface cliente, tenha um impacto bem menor. Separar e definir responsabilidades únicas a cada uma das classes envolvidas no sistema, isso garante um baixo acoplamento, uma fraca dependência. Você desenvolve assim? Faça um pequeno teste. Inicie um novo projeto em Delphi, peça ao IDE para adicionar uma nova unit ao seu projeto vazio e selecione aquelas units com as classes mais genéricas do seu framework, aquelas do tipo “util.pas” que você utiliza em todos os projetos. Verifique se ela irá compilar sem problemas, sem que esteja atrelada (acoplada) a outras classes (tipo units específicas de projetos como Estoque, Financeiro, Acadêmico). Se isso ocorrer, você pode até resolver usando um pouco de POG colocando um IFDEF na sua util.pas e definindo uma diretiva condicional no projeto que a usa (eu já fiz isso! Bom, eu era estagiário...). Aqui na ClubeDelphi trabalhamos com profissionalismo, e como de costume, como o amigo leitor deve ter certamente reparado nas últimas edições, trazemos não só o melhor do Delphi a cada mês, mas que este melhor seja desenvolvido e apresentado corretamente, da melhor forma, usando boas práticas, excelentes práticas. Programação Orientada a Objetos, Design Patterns, Interfaces, Generics, RTTI, Encapsulamento, Polimorfismo, têm sido temas frequentes em nossa revista. Confira a matéria de capa do Rafael e comprove!
E aqui vai outra dica para tornar suas classes menos acopladas e com maior reaproveitamento: tome cuidado com o lugar onde você escreve o TSuaClasse.Create(). Isso porque uma classe não deve conhecer a implementação concreta de outra classe, mas precisa se ligar a ela através de uma interface, ou uma classe mais básica, ou ainda abstrata. Na verdade, quando uma classe A quiser instanciar uma outra do tipo B, deve pedir isso a uma outra classe C (chamada de fábrica). Esse é um “problema” clássico da OO para o qual já existe uma solução, um padrão de projeto criacional, mostrado na prática no artigo do Giuliano e Tadeu.
Cansado de passar ou declarar TObject em procedures que precisam receber qualquer coisa? Ou pior ainda, Pointer? Esqueça. Generics é um ingrediente que estava faltando há anos no Delphi, agora disponível para Win32 (Delphi 2009 / 2010). O Vitor desvenda tudo sobre este tema que já estamos discutindo há algumas edições aqui na ClubeDelphi. Nesta edição, o tema é bastante aprofundado: você verá como criar uma classe genérica para trabalhar com dados fortemente tipados, igualzinho ao que fez o .NET para coleções (e agora o Delphi Win32 também).
Na parte Web, com PHP, também não deixamos as boas práticas de lado! O Raphael e o Lucas mostram como implementar o famoso padrão MVC. Não deixe de conferir também nesta edição uma matéria do Jaderson, sobre a integração do Delphi com SPED.
Confira abaixo a lista completa de artigos desta edição:
JSON no DataSnap 2010
Rodrigo Carreiro Mourão
SPED Contábil e Fiscal
Entenda como fazer a geração do arquivo solicitado pelo SPED
Jederson Zuchi
Programação Orientada a Objetos
Utilize Generics, Padrões de Projeto e OO para criar um Log das ações do sistema
Rafael Stavarengo
Abstract Factory
Flexibilizando a criação de objetos
Giuliano Prado de Morais Giglio e Tadeu Moreira de Classe
Entendendo Generics
O que você precisa saber para começar a usar Generics em seus projetos Delphi
Vitor Luiz Rubio
MVC com PHP na prática
Migre passo a passo uma aplicação OO para usar o poderoso padrão MVC
Lucas Simões Maistro e Raphael Zanon Rodrigues
Ferramentas e Plug-ins
Produtividade no desenvolvimento, trabalho em equipe e modelagem de processos
Ricardo Coelho
Agradeço a toda a nossa equipe editorial pelo belo trabalho, e também a todos os nossos colaboradores!
Guinther Pauli
Editor Geral Revista ClubeDelphi
Editor Geral Revista .NET Magazine
guinther@devmedia.com.br
Certificado Delphi 3,5,6,7,2005,2006,Web,Kylix
Microsoft Certified: MCP,MCAD,MCSD.NET,MCTS,MCPD (ASP.NET,C#)
http://twitter.com/guintherpauli