I tipi esistono per una ragione, se non aggiungessero alcun vantaggio, non li avremmo e non li useremmo e avremmo semplicemente "il tipo" e tutto sarebbe quello. Non solo sono convenienti, ma aggiungono anche sicurezza ed efficienza. Di seguito è riportato un elenco dei motivi per cui dovresti sempre mantenere i tipi nel loro formato nativo e non come stringhe . Ho usato DateTime
come esempio la maggior parte delle volte ma gli stessi principi si applicano a qualsiasi tipo primitivo come numeri interi, decimali, binari, ecc.
Archivio dati
vincoli
Digitare Vincolo
Quasi tutti gli archivi dati consentono di specificare vincoli sui dati, inclusi i vincoli di tipo. Uno dei principali vantaggi della specifica di DateTime
un'istanza è che i dati memorizzati saranno vincolati a quel tipo. Non sarà mai possibile inserire altro che una data e ora indipendentemente da come i dati sono stati inseriti nel negozio. Quest'ultimo è importante per i sistemi più grandi in cui esistono più processi che interagiscono direttamente con il negozio. Ciò include anche il tentativo di aggiungere date errate come il 30 febbraio (di qualsiasi anno) poiché febbraio può avere solo 29 giorni in un anno bisestile e 28 giorni per gli anni non bisestili.
Vincoli di convalida
Esistono anche vincoli di convalida che possono essere implementati nell'archivio dati come garantire che una data inserita non superi la data corrente o che una data di inizio si verifichi prima di una data di fine.
operazioni
La maggior parte degli archivi di dati ha anche operazioni / funzioni integrate come DateAdd
o DatePart
in MS SQL Server. Ciò consente di iniziare a filtrare o selezionare dati specifici mentre i dati sono ancora nell'archivio (non ancora recuperati nell'applicazione).
Formato universalmente accettato
Usando il tipo nativo, altri sviluppatori o sistemi che interagiscono anche con il negozio non devono essere informati nei minimi dettagli su come è memorizzato quel tipo primitivo. Questo non è il caso se quel tipo è stato memorizzato come stringa, quindi devi assicurarti che tutti comprendano il formato di quella DateTime
rappresentazione di stringa. Questo sistema diventa fragile quando si tratta di dati che si estendono su locali, regioni e culture nell'origine dei dati, la posizione fisica di un'applicazione e gli attributi dell'utente finale / sistema che interagisce con tali dati. Esempio: il formato della data in un paese potrebbe essere MM / gg / aaaa (come negli Stati Uniti) ma in un altro potrebbe essere gg / MM / aaaa, rilevando che la differenza diventa quasi impossibile.
Velocità
La velocità di recupero, la velocità di convalida, la velocità delle operazioni e l'efficienza dello stoccaggio sono tutti fattori importanti. Esempio di velocità di recupero: gli archivi di dati consentono indici su colonne e questi indici possono essere generalmente utilizzati in modo più efficiente se il tipo è archiviato nel suo formato nativo.
Applicazione
Accesso ai dati
L'esecuzione di query sullo store diventa più semplice utilizzando il sistema di tipi nativi poiché gli sviluppatori, ancora una volta, non devono indovinare il formato di archiviazione. Quasi tutti i fornitori di applicazioni per l'archivio dati ( esempio: ado.net ) forniscono meccanismi per la creazione delle query con parametri corretti basate sui tipi nativi passati. Ecco un esempio di aggiunta della parte Data a una query ado.net contro un negozio Sql Server, fare lo stesso con le stringhe sarebbe molto ingombrante e fragile / soggetto a errori.
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
operazioni
I tipi nativi nel codice forniscono anche operazioni standard come il tipo .net System.Date
. Le operazioni sono generalmente di natura matematica come l'aggiunta di date, la ricerca della differenza tra le date, ecc. Ancora una volta, questo non è possibile fare facilmente sui tipi di stringa.
Livello di presentazione
località
Quando un tipo primitivo viene infine convertito in una stringa nel livello di presentazione ( la posizione corretta nello stack del programma per farlo ), il programmatore ora ha varie opzioni per visualizzarlo correttamente in base al contesto in cui viene presentato. Questo contesto è generalmente costituito dal significato effettivo dei dati e dalle impostazioni locali dell'utente.
Esempio 1
Un'istanza di datetime può essere formattata automaticamente in base alle impostazioni internazionali dell'utente.
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
Esempio 2
Un'istanza decimale potrebbe rappresentare un importo (valuta) e le impostazioni internazionali dell'utente dovrebbero quindi visualizzare l'importo in base alle loro preferenze. Un'applicazione c # potrebbe quindi visualizzare il valore utilizzando
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
Questo potrebbe essere fondamentale poiché diverse culture visualizzano i numeri in modo diverso. Nel periodo degli Stati Uniti (.) E la virgola (,) hanno l'esatto significato inverso come nei Paesi Bassi.
Posizione
Questo è molto specifico per le DateTime
istanze. Una data e ora rappresentano un evento in un determinato momento, ma di solito questo deve essere trasmesso / presentato all'utente in base al proprio fuso orario. Esempio: DateTime
un'istanza 2016-09-21T23:38:21.399Z
può essere visualizzata come 9/21/2016 5:21 PM
per un utente nel fuso orario orientale negli Stati Uniti. Esistono molti modi per farlo, ma diventa quasi impossibile se l'istanza di data e ora viene mantenuta in memoria come tipo di stringa o nell'archivio dati come tipo di stringa.
Regola generale
Le regole generali 2 per un'applicazione seguono quando si tratta di convertire qualsiasi tipo primitivo in una rappresentazione di stringa sono come queste
- Quando si accetta l'input, convertire quell'input nel tipo di primitiva corretto il più presto possibile nello stack del programma (di solito nel livello di presentazione)
- Quando si recuperano i dati da visualizzare, convertirli nella rappresentazione di stringa il più tardi possibile nello stack del programma (di nuovo, di solito nel livello di presentazione)