Les types existent pour une raison, s'ils n'apportaient aucun avantage, nous ne les aurions pas et ne les utiliserions pas. Nous aurions simplement "le type" et tout serait comme ça. Ils ne sont pas seulement pratiques, ils ajoutent également sécurité et efficacité. Vous trouverez ci-dessous une liste des raisons pour lesquelles vous devez toujours conserver les types dans leur format natif et non sous forme de chaîne . La DateTime
plupart du temps, j'ai utilisé l'exemple, mais les mêmes principes s'appliquent à tous les types primitifs tels que les entiers, les nombres décimaux, les valeurs binaires, etc.
Magasin de données
Contraintes
Type de contrainte
Presque tous les magasins de données permettent de spécifier des contraintes sur les données, ceci inclut les contraintes de type. L'un des principaux avantages de la spécification d'une DateTime
instance est que les données stockées seront limitées à ce type. Il ne sera jamais possible de saisir quoi que ce soit autre que la date et l'heure, quelle que soit la manière dont les données ont été insérées dans le magasin. Ce dernier point est important pour les systèmes plus grands où plusieurs processus interagissent directement avec le magasin. Cela implique également d’ajouter des dates erronées comme le 30 février (d’une année à l’autre), car février ne peut compter que 29 jours sur une année bissextile et 28 jours pour les années non bissextiles.
Contraintes de validation
Il existe également des contraintes de validation pouvant être implémentées dans le magasin de données, telles que le fait de s'assurer qu'une date insérée ne dépasse pas la date actuelle ou qu'une date de début survient avant une date de fin.
Opérations
La plupart des magasins de données ont également des opérations / fonctions intégrées telles que DateAdd
ou DatePart
dans MS Sql Server. Cela vous permet de commencer à filtrer ou à sélectionner des données spécifiques pendant que les données sont encore dans le magasin (pas encore récupérées dans l'application).
Format universellement accepté
En utilisant le type natif, les autres développeurs ou systèmes qui interagissent également avec le magasin ne doivent pas nécessairement être informés des derniers détails relatifs au stockage de ce type primitif. Ce n'est pas le cas si ce type était stocké sous forme de chaîne, vous devez donc vous assurer que tout le monde comprend le format de cette DateTime
représentation. Ce système devient fragile lorsqu'il traite des données couvrant les paramètres régionaux, les régions et les cultures d'origine, l'emplacement physique d'une application et les attributs de l'utilisateur final / du système qui interagit avec ces données. Exemple: le format de date dans un pays peut être MM / jj / aaaa (comme aux États-Unis) mais dans un autre pays, jj / mm / aaaa, détecter cette différence devient presque impossible.
La vitesse
La rapidité de récupération, la validation, la rapidité des opérations et l'efficacité du stockage sont également des facteurs importants. Exemple de vitesse de récupération: les magasins de données autorisent les index sur les colonnes et ces index peuvent généralement être utilisés plus efficacement si le type est stocké dans son format natif.
Application
Accès aux données
L'exécution de requêtes sur le magasin devient plus simple en utilisant le système de type natif car les développeurs, encore une fois, n'ont pas à deviner le format de stockage. Presque tous les fournisseurs d’applications de magasin de données ( exemple: ado.net ) fournissent des mécanismes permettant de créer les requêtes paramétrées appropriées en fonction des types natifs transmis. Voici un exemple d’ajout de la partie Date à une requête ado.net dans un magasin Sql Server, faire la même chose avec des chaînes serait très encombrant et fragile / sujet aux erreurs.
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
Opérations
Les types natifs dans le code fournissent également des opérations standard telles que le type .net System.Date
. Les opérations sont généralement de nature mathématique, telles que l’ajout de dates, la recherche de la différence entre les dates, etc. Encore une fois, il n’est pas possible de le faire facilement avec des types de chaîne.
Couche de présentation
Lieu
Lorsqu'un type primitif est finalement converti en chaîne dans la couche de présentation ( l'emplacement correct dans la pile de programmes pour le faire ), le programmeur dispose désormais de plusieurs options pour l'afficher correctement en fonction du contexte dans lequel il est présenté. Ce contexte comprend généralement la signification réelle des données et les paramètres régionaux de l'utilisateur.
Exemple 1
Une instance datetime peut être automatiquement formatée en fonction des paramètres régionaux de l'utilisateur.
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
Exemple 2
Une instance décimale peut représenter un montant (devise) et les paramètres régionaux de l'utilisateur doivent également afficher le montant en fonction de leurs préférences. Une application c # peut alors afficher la valeur à l'aide de
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
Cela peut être critique car différentes cultures affichent les chiffres différemment. Aux États-Unis, le point (.) Et la virgule (,) ont exactement le sens inverse aux Pays-Bas.
Emplacement
Ceci est très spécifique aux DateTime
instances. Une date et une heure représentent un événement à un moment précis, mais celui-ci doit généralement être transmis / présenté à l'utilisateur en fonction de son propre fuseau horaire. Exemple: une DateTime
instance 2016-09-21T23:38:21.399Z
pourrait être affichée comme 9/21/2016 5:21 PM
pour un utilisateur du fuseau horaire oriental aux États-Unis. Il existe de nombreuses façons d’y parvenir, mais cela devient pratiquement impossible si l’instance d’heure de la date est conservée en mémoire en tant que type de chaîne ou dans le magasin de données en tant que type de chaîne.
Règle générale
Les 2 règles générales pour une application suivent lorsqu’il s’agit de convertir un type primitif en représentation sous forme de chaîne sont les suivantes:
- Lors de l'acceptation d'une entrée, convertissez cette entrée dans le type de primitive correct le plus tôt possible dans la pile de programmes (généralement dans la couche de présentation).
- Lors de la récupération des données à afficher, convertissez ces données en représentation sous forme de chaîne aussi tard que possible dans la pile de programmes (à nouveau, généralement dans la couche de présentation).