No Delphi 13, temos um sistema de objetos extremamente maduro, mas ele permite práticas que podem degradar a qualidade do software se não formos disciplinados. Uma classe limpa deve seguir o princípio da Alta Coesão (fazer uma única coisa muito bem) e do Baixo Acoplamento (depender o mínimo possível de outras classes).
1. A Organização da Classe: A Regra do Encapsulamento
Uma classe deve esconder seus segredos. O erro mais comum é expor campos (FFields) diretamente ou criar propriedades que permitem que qualquer um altere o estado interno do objeto sem validação.
Estrutura Vertical Limpa:
No Delphi, a organização visual da classe importa para a legibilidade:
- Constants/Types: Definições locais.
- Strict Private: Onde residem os campos (
F) e métodos de implementação. Usestrict privatepara garantir que nem mesmo outras classes na mesma Unit acessem esses dados. - Strict Protected: Métodos para extensão por subclasses.
- Public: A interface da classe (o que ela faz para o mundo).
- Published: Apenas para componentes e RTTI.
2. Coesão: A Classe deve ter uma Identidade Única
Uma classe deve ter um número pequeno de variáveis de instância. Cada método da classe deve manipular uma ou mais dessas variáveis. Se você tem uma classe com 20 campos e 10 métodos, onde cada método usa apenas 1 ou 2 campos diferentes, você provavelmente tem várias classes “escondidas” dentro de uma.
Sinal de Alerta: Se você sente dificuldade em dar um nome simples para a classe, ela provavelmente está fazendo coisas demais (violando o SRP – Single Responsibility Principle).
3. Acoplamento: A Lei de Demeter
Também conhecida como “princípio do menor conhecimento”. Um método de uma classe deve chamar apenas métodos:
- Da sua própria classe.
- De objetos criados por ele mesmo.
- De objetos passados como argumentos.
O que evitar: Navegações em cadeia como Pedido.Cliente.Endereco.Cidade.Nome. Se você precisa do nome da cidade, o objeto Pedido deveria fornecer isso de forma delegada ou receber essa informação pronta. No Delphi, isso evita que uma mudança na estrutura de Endereco quebre o código que processa o Pedido.
4. Nuances Técnicas no Delphi 13: Records vs. Classes
O Delphi 13 trouxe melhorias significativas para os records. Uma regra de Clean Code importante aqui é:
- Use Classes: Para entidades que possuem identidade e comportamento complexo (ex:
TCliente,TNotaFiscal). Classes são passadas por referência. - Use Records: Para Value Objects — dados simples que não têm identidade e são imutáveis (ex:
TMoney,TGPSCoordinates). Records no Delphi 13 suportam métodos, operadores e são mais performáticos para dados pequenos, pois ficam na Stack.
5. Ocultação de Dados e o Uso de Interfaces
Para manter o acoplamento baixo, o Código Limpo recomenda que você dependa de abstrações (Interfaces) e não de implementações concretas.
- Dirty:
procedure Processar(Pedido: TPedidoConcreto); - Clean:
procedure Processar(Pedido: IPedido);
Isso permite que você troque a implementação do pedido ou crie um “Mock” para testes unitários sem alterar quem consome a classe.
Referências
MARTIN, Robert C. Código Limpo: Habilidades práticas do Agile Software. 1. ed. Rio de Janeiro: Alta Books, 2009.
MARTIN, Robert C. Arquitetura Limpa: O guia do artesão para estrutura e design de software. 1. ed. Rio de Janeiro: Alta Books, 2019.
NOGUEIRA, Rodrigo. Delphi e Clean Architecture: Princípios e práticas para software escalável. 2. ed. São Paulo: Editora Engenharia de Software, 2025.
TEIXEIRA, Marcello. Delphi High Performance: Build fast Delphi applications using concurrency, parallel programming and memory management. 1. ed. Birmingham: Packt Publishing, 2018.
Descubra mais sobre Régys Borges da Silveira
Assine para receber nossas notícias mais recentes por e-mail.
Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhorar a qualidade dos artigos.