Domanda

Sto provando un'app Web usando Servlet e JSPS e devo modellare il numero ISBN di un elemento nella mia classe e nelle mappature in letargo. Quale dovrebbe essere il tipo di numero ISBN? Long o String? Mi ero imbattuto in molti tutorial che usano uno di essi .. ISBN è presumibilmente un identificatore a 10 cifre ... a volte ti imbatti in numeri come 0-85131-041-9 che non possono essere un lungo .. Alcuni esempi usano numeri senza trattino ..

Quindi, quale dovrebbe essere il tipo? Eventuali suggerimenti?

Grazie

marchio

È stato utile?

Soluzione

Lo conserverei in un Long proprietà e usa un formatter/parser (essenzialmente, un convertitore). Quando hai intenzione di visualizzarlo, il convertitore dovrebbe semplicemente convertire il Long Proprietà a una rappresentazione umana con trattini nei luoghi giusti. Quando hai intenzione di convalidarlo/persistere, il convertitore dovrebbe rimuovere tutti i trattini dal valore inviato e metterlo in un Long proprietà.

Fondamentalmente, è la stessa idea che useresti per un Date campo di cui formati/analizzi nella rappresentazione umana con l'aiuto di SimpleDateFormat. L'unica differenza è che il formatter/parser ISBN non è disponibile dall'API Java SE standard. Dovresti scriverne uno da solo o adottare una di terza parte (di cui non mi viene in mente nessuno esistente). Finalmente questo convertitore può quindi essere usato come tag JSP (come quello di JSTL <fmt:formatDate>) o una classe Java autonoma che è invocata da una funzione EL o quando si utilizza JSF, a @FacesConverter classe.

A causa del complessorit del numero ISBN, questo è effettivamente più spesso immagazzinato come a String in modo che lo sviluppatore non debba preoccuparsi di schemi validi. Che sia buono o cattivo è una domanda che devi fare a te stesso e alla tua squadra.

Altri suggerimenti

ISBN ha 13 cifre (vedi wiki). Userei una classe che controlla la validità del dato String. Qualcosa di simile a:

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
  }
}

Questo, ovviamente, potrebbe essere un po 'troppo. Se la tua app è davvero semplice, potresti andare con String va bene.

Modificare La sillana divide il numero in gruppi (lingua, editore, ecc.). Tuttavia, per quanto riguarda l'unicità del numero, sillado (o divisione con gli spazi) non gioca alcun ruolo.

In realtà ISBN non sono 10 cifre ma 12 cifre + un controllo FAQ ISBN Il controllo può essere una x

Il metodo per determinare la cifra di controllo per l'ISBN è il modulo 11 con i fattori di ponderazione da 10 a 1. Il numero romano X viene utilizzato al posto di 10 in cui dieci si verificherebbero come una cifra di controllo.

Se si archiviano informazioni che un utente ha digitato, è necessario includere la cifra di controllo e quindi questa deve essere una stringa.

Se stai conservando l'ISBN effettivo, puoi ignorare il controllo in quanto puoi calcolarlo. Tuttavia, se si utilizzano le nuove 12 cifre, i numeri sono maggiori di un lungo possono trattenere, se le vecchie 10 cifre potrebbero essere trattenute a lungo, ma dovresti ricordare di aggiungere eventualmente le protagoniste. Pertanto, in questo caso lo trattenerei in una stringa rimuovendo tutti i dati di dati non numerici, ad esempio.

Anche guardando quelle FAQ c'è un possibile motivo per archiviare la divisione ISBN per consentire la ricerca per parti.

Le cinque parti di un ISBN sono le seguenti:
1. L'attuale ISBN-13 sarà prefissata da "978"
2. Identificatore di gruppo o paese che identifica un gruppo nazionale o geografico di editori;
3. Identificatore editore che identifica un particolare editore all'interno di un gruppo;
4. Identificatore del titolo che identifica un titolo o un'edizione particolare di un titolo;
5. Controllare la cifra è la singola cifra alla fine dell'ISBN che convalida l'ISBN.

e 5 non deve essere salvato in quanto può essere calcolato, ma deve essere acquisito dagli utenti per convalidare l'ingresso.

Questa domanda non ha davvero nulla a che fare con J2EE, ma semplicemente con i dati Java e forse i tipi di dati sul motore del database.

Se vuoi includere i trattini in qualsiasi output, piuttosto devi archiviarlo come stringa. A meno che tu non voglia scrivere codice per capire dove vanno i trattini, ma le regole dietro sono abbastanza complicate, a seconda dei valori delle cifre all'inizio del numero. (Se stai lavorando su un sistema che assegna ISBNS o li smonta e lavora con i pezzi, forse vuoi farlo. Se vuoi solo che l'utente lo dia e lo ricordi, questo sembra troppi guai .)

Immagino che se non ti interessa i trattini, potresti usare una stringa o un lungo. Tuttavia, un lungo sarebbe un dolore extra in quanto dovresti capire quando mostrare zeri principali.

Risposta breve: non vedo alcun vantaggio nel memorizzarlo come numero. Usa una stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top