Pergunta

Dado este cenário onde você tem "objetos de transferência" (POJO's com apenas getters/setters) que são passados ​​por uma biblioteca cliente para sua API, qual é a melhor maneira de nomear os objetos de transferência?

package com.x.core; 

public class Car {
        private String make;
        private String model;

        public Car(com.x.clientapi.Car car) {
             this.make = car.getMake();
             this.model = car.getModel();
        }
}

Neste exemplo, sua classe principal e seu objeto de transferência têm o nome Car.Eles estão em pacotes diferentes, mas acho confuso ter o mesmo nome.Existe uma prática recomendada sobre como nomear os objetos de transferência?

Foi útil?

Solução

Geralmente adiciono 'DTO' ao final do nome da classe e também coloco todos os DTOs em seu próprio pacote.No seu exemplo, eu o chamaria de com.x.core.dto.CarDTO.

Outras dicas

Data Ttransferir Óobjeto as aulas deverão seguir o convenção de nomes definido no Especificação da linguagem Java:

Os nomes dos tipos de classe devem ser substantivos descritivos ou sintagmas nominais, não muito longos, em letras maiúsculas e minúsculas, com a primeira letra de cada palavra em maiúscula.

ClassLoader
SecurityManager
Thread
Dictionary
BufferedInputStream

[...]


Sufixando um nome de classe com DTO ou Dto não é realmente significativo e não diz muito sobre a classe em si.Considere usar nomes que descrevam o propósito de suas aulas.

Aqui está uma lista não exaustiva de sugestões de nomes que você pode usar:

  • Algum tipo deComando
  • Algum tipo deConfiguração
  • Algum tipo deCredenciais
  • Algum tipo deDetalhes
  • Algum tipo deElemento
  • Algum tipo deEvento
  • Algum tipo deCabeçalho
  • Algum tipo deEntrada
  • Algum tipo deInstrução
  • Algum tipo deItem
  • Algum tipo deMensagem
  • Algum tipo deMetadados
  • Algum tipo deOperação
  • Algum tipo deSaída
  • Algum tipo deCarga útil
  • Algum tipo deProjeção
  • Algum tipo deParâmetro de Consulta
  • Algum tipo deResultado da Consulta
  • Algum tipo deRepresentação
  • Algum tipo deSolicitar
  • Algum tipo deRecurso
  • Algum tipo deResposta
  • Algum tipo deResultado
  • Algum tipo deLinha
  • Algum tipo deConfigurações
  • Algum tipo deEspecificação
  • Algum tipo deStatus
  • Algum tipo deResumo

Nota 1: Se as siglas ou todas as palavras em maiúsculas devem ser tratadas como palavras ou não, acho que depende de você.Verifica a API Java e você encontrará alguns tropeços como ZipInputStream / GZIPInputStream.Ambas as turmas estão no mesmo pacote e a convenção de nomes não é consistente. HttpURLConnection também não mostra consistência com siglas.

Nota 2: Alguns nomes listados acima foram emprestados deste artigo escrito por Richard Dingwall (o artigo original parece não estar mais disponível, então aqui está uma cópia em cache do Arquivo da Web).

Adicionar DTO ou DAO ou qualquer outra coisa viola o DRY.O FQN está perfeitamente bem, especialmente se forem realmente a mesma coisa.

Não creio que exista uma prática recomendada ou convenção para uma turma que exiba esse tipo de comportamento.Pessoalmente, não gosto da palavra Object em nenhum dos nomes de classes.Você pode usar alguma qualificação como Poko.car ou usar alguma convenção de nomenclatura como carbiz de carbiz (para a classe de domínio de negócios)

Ou se você não se importa com a palavra objeto no nome de uma classe, escolha algo como CarDto (Car Data Transfer Object)

Use uma convenção que seja adequada entre as outras convenções de código que você está usando.Eu pessoalmente uso o sufixo "TO" (por exemploo objeto de transferência de dados associado à classe de domínio Cliente é denominado CustomerTO).Além disso, a estrutura do pacote deve transmitir a intenção de cada tipo de classe (so.foo.domain.Customer e so.foo.transport.CustomerTO)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top