Pergunta

Estou testando um aplicativo da web usando servlets e jsps e preciso modelar o número isbn de um item em minha classe, bem como em mapeamentos de hibernação. Qual deve ser o tipo de um número isbn? Long ou String?Eu encontrei muitos tutoriais que usam qualquer um deles. isbn é supostamente um identificador de 10 dígitos .. às vezes você encontra números como 0-85131-041-9 que não podem ser um Longo .. Alguns exemplos usam números sem hifens ..

Então, qual deve ser o tipo?Alguma sugestão?

obrigado

marca

Foi útil?

Solução

Eu o armazenaria em uma propriedade Long e usaria um formatador / analisador (essencialmente, um conversor). Quando você for exibi-lo, o conversor deve apenas converter a propriedade Long em uma representação humana com hífens nos lugares certos. Quando você for validar / persistir, o conversor deve remover todos os hifens do valor enviado e colocá-lo em uma propriedade Long.

Basicamente, é a mesma ideia que você usaria para um campo Date que formata / analisa na representação humana com a ajuda de SimpleDateFormat. A única diferença é que o formatador / analisador ISBN não está disponível pela API Java SE padrão. Você precisaria escrever um sozinho ou adotar um de terceiros (do qual nenhum existente vem à mente). Finalmente, este conversor pode ser usado como uma tag JSP (como o <fmt:formatDate> do JSTL) ou uma classe Java autônoma que é chamada por uma função EL ou quando você está usando JSF, uma classe @FacesConverter.

Devido à complexidade do número ISBN, ele é de fato mais do que frequentemente armazenado como um String para que o desenvolvedor não precise se preocupar com padrões válidos. Se isso é bom ou ruim, é uma pergunta que você deve fazer a si mesmo e à sua equipe.

Outras dicas

O ISBN tem 13 dígitos (consulte wiki ).Eu usaria uma classe que verifica a validade de determinado String.Algo como:

class ISBN {
  private String isbn;
  public ISBN(String isbn) throws ISBNFormatException {
    // you might want to filter hyphens first, before the check
    if(ISBN.isValid(isbn)) this.isbn = isbn;
    else throw new ISBNFormatException(isbn);
  }
  public static boolean isValid(String s) {
   // validate number here, see wiki
  }
}

Isso, é claro, pode ser um pouco demais.Se seu aplicativo for realmente simples, você pode usar String perfeitamente.

Editar A hifenização divide o número em grupos (idioma, editor, etc.).No entanto, quanto à exclusividade do número, a hifenização (ou divisão com espaços) não desempenha nenhum papel.

Na verdade, ISBN não são 10 dígitos, mas 12 dígitos + uma verificação FAQ do ISBN O cheque pode ser um X

O método para determinar o dígito de verificação do ISBN é o módulo 11 com os fatores de ponderação de 10 a 1. O numeral romano X é usado no lugar de 10, onde dez ocorreria como um dígito de verificação.

Se você estiver armazenando informações que um usuário digitou, deve incluir o dígito de verificação e, portanto, deve ser uma string.

Se você estiver armazenando o ISBN real, poderá ignorar o cheque, pois poderá calculá-lo. No entanto, se usar os novos 12 dígitos, os números são maiores do que um longo pode conter; se os 10 dígitos antigos, ele poderia ser mantido em um longo, mas você teria que se lembrar de possivelmente adicionar os zeros iniciais de volta. Assim, neste caso, eu o manteria em uma string removendo todos os dados não numéricos, por exemplo hífens.

Também olhando para esse FAQ, há uma possível razão para armazenar a divisão do ISBn para permitir a pesquisa por partes.

As cinco partes de um ISBN são as seguintes:
1. O ISBN-13 atual será prefixado por "978"
2. Identificador de grupo ou país que identifica um agrupamento nacional ou geográfico de editores;
3. Identificador de editor que identifica um editor específico em um grupo;
4. Identificador de título que identifica um título ou edição particular de um título;
5. O dígito de verificação é o único dígito no final do ISBN que valida o ISBN.

e 5 não precisam ser salvos, pois podem ser calculados, mas precisam ser capturados dos usuários para validar a entrada.

Esta questão não tem nada a ver com J2EE, mas simplesmente com tipos de dados Java e talvez os tipos de dados em seu mecanismo de banco de dados.

Se você quiser incluir os hifens em qualquer saída, terá que armazená-los como uma string.A menos que você queira escrever um código para descobrir para onde vão os hifens, mas as regras por trás disso são bastante complicadas, dependendo dos valores dos dígitos no início do número.(Se você está trabalhando em um sistema que atribui ISBNs ou os desmonta e trabalha com as peças, talvez você queira fazer isso. Se você apenas deseja que o usuário digite e você se lembre, isso parece muito problemático.)

Acho que se você não se preocupa com os hífens, pode usar uma string ou um long.Ainda assim, um longo seria um incômodo extra, pois você teria que descobrir quando exibir os zeros à esquerda.

Resposta curta: Não vejo nenhuma vantagem em armazená-lo como um número.Use uma corda.

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