Introdução | Linguagens
- Introdução | Linguagens
Design de Código | Linguagens
Uma definição:
O design é definido tanto como "o processo de definir a arquitetura, os componentes, as interfaces e outras características de um sistema ou componente" quanto como "o resultado desse processo".
BOURQUE, Pierre; FAIRLEY, R. E. (ORGS.). SWEBOK: guide to the software engineering body of knowledge. Version 3.0 ed. Los Alamitos, CA: IEEE Computer Society, 2014.
Outra que eu gosto:
O processo de design de sistemas aloca os requisitos a sistemas de hardware ou software. Ele estabelece uma arquitetura geral do sistema. O projeto de software envolve a identificação e a descrição das abstrações fundamentais do sistema de software e seus relacionamentos.
SOMMERVILLE, Ian. Software engineering. Tenth edition ed. Pearson, 2016.
Principais tipos de escrita
🔤 Tipos de escrita (naming conventions):
| Nome | Exemplo | Explicação |
|---|---|---|
| camelCase | minhaVariavelLegal | Primeira palavra minúscula, próximas com letra maiúscula. Muito comum em JavaScript, C#, Java para variáveis e métodos. |
| PascalCase | MinhaVariavelLegal | Todas as palavras começam com maiúscula. Usado em nomes de classes, propriedades em C#, Java, etc. |
| snake_case | minha_variavel_legal | Todas minúsculas, separadas por underscore. Muito comum em Python, bancos de dados, e scripts. |
| SCREAMING_SNAKE_CASE | MINHA_VARIAVEL_LEGAL | Igual ao snake_case, mas tudo em maiúsculo. Usado para constantes. |
| kebab-case | minha-variavel-legal | Palavras separadas por hífen. Comum em URLs, nomes de arquivos, CSS (ex: font-size). |
| dot.case | minha.variavel.legal | Palavras separadas por ponto. Usado em alguns formatos de configuração (ex: config.env.dev). |
| UPPERCASE | MINHAVARIAVELLEGAL | Tudo em maiúsculas, sem separadores. Raramente usado (às vezes em siglas). |
| lowercase | minhavariavellegal | Tudo em minúsculas, sem separadores. Usado em códigos muito compactos ou simplificados. |
Nomenclaturas de classe
POCO (Plain Old CLR Object)
- Representa dados e modelos de negócio.
- Não possui comportamento (métodos com lógica).
- Usado para persistência de dados.
- Independente de frameworks.
- Não deve conter validação ou regras de persistência.
DTO (Data Transfer Object)
DTO's não faz parte do domínio.
1. DTO quebra o isolamento do domínio
DTO existe para:
- Transportar dados (API, fila, HTTP, gRPC, etc.)
- Serialização
- Contratos externos
O domínio:
- Expressa regras de negócio
- Deve ser agnóstico a transporte
Se o domínio conhece DTO:
👉 ele passa a conhecer API, fila, JSON, versionamento, etc.
- Responsável por transferir dados entre camadas, processos ou aplicações.
- Imutável e sem comportamento.
- Otimizado para serialização/deserialização.
- Não contém lógica de negócio nem validações.
- Pode conter dados não validados do ponto de vista do domínio.
- Representa dados específicos demandados pelo consumidor.
- Pode agrupar dados de múltiplas fontes para um propósito específico.
Entity
- Representa modelos de domínio geralmente mapeados a tabelas de banco de dados.
- Contém lógica de negócio, validação, operações CRUD e acesso a dados relacionados.
- Garante consistência dos dados no domínio.
- Pode representar objetos do domínio que não estão diretamente ligados a tabelas.
- Usada em frameworks de mapeamento objeto-relacional (ORM).
VO (Value Object)
- Imutável e usado para representar valores conceituais como datas, dinheiro, etc.
- Não é usado diretamente para persistência, mas pode compor entidades.
- A comparação entre VOs é baseada em valores de propriedades, não em referência.
- Deve garantir validade dos dados no momento da criação.
- Criado geralmente via construtor, método estático ou padrão builder.
Model
- Estrutura de dados usada principalmente na camada de infraestrutura.
- Equivale a um DTO.
- Reflete a estrutura de uma tabela ou resposta de API.
- Sem lógica de negócio.
Result
- Classe auxiliar que encapsula o resultado de uma operação.
- Contém status (sucesso, falha) e valor ou mensagem de retorno.
- Usado para controlar o fluxo e o tratamento de exceções de forma clara.