Skip to main content

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):

NomeExemploExplicação
camelCaseminhaVariavelLegalPrimeira palavra minúscula, próximas com letra maiúscula. Muito comum em JavaScript, C#, Java para variáveis e métodos.
PascalCaseMinhaVariavelLegalTodas as palavras começam com maiúscula. Usado em nomes de classes, propriedades em C#, Java, etc.
snake_caseminha_variavel_legalTodas minúsculas, separadas por underscore. Muito comum em Python, bancos de dados, e scripts.
SCREAMING_SNAKE_CASEMINHA_VARIAVEL_LEGALIgual ao snake_case, mas tudo em maiúsculo. Usado para constantes.
kebab-caseminha-variavel-legalPalavras separadas por hífen. Comum em URLs, nomes de arquivos, CSS (ex: font-size).
dot.caseminha.variavel.legalPalavras separadas por ponto. Usado em alguns formatos de configuração (ex: config.env.dev).
UPPERCASEMINHAVARIAVELLEGALTudo em maiúsculas, sem separadores. Raramente usado (às vezes em siglas).
lowercaseminhavariavellegalTudo 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)

danger

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.