Typen gibt es aus einem Grund, wenn sie keinen Nutzen bringen würden, hätten wir sie nicht und würden sie nicht benutzen und hätten nur "den Typ" und alles wäre das. Sie sind nicht nur bequem, sondern tragen auch zur Sicherheit und Effizienz bei. Im Folgenden finden Sie eine Liste der Gründe, warum Sie Typen immer in ihrem ursprünglichen Format und nicht als Zeichenfolgen beibehalten sollten . Ich habe die DateTime
meiste Zeit als Beispiel verwendet, aber die gleichen Prinzipien gelten für alle primitiven Typen wie Ganzzahlen, Dezimalzahlen, Binärzahlen usw.
Datenspeicher
Einschränkungen
Geben Sie Constraint ein
In fast allen Datenspeichern können Einschränkungen für die Daten angegeben werden, einschließlich Typeinschränkungen. Einer der Hauptvorteile der Angabe einer DateTime
Instanz besteht darin, dass die gespeicherten Daten auf diesen Typ beschränkt sind. Es ist niemals möglich, etwas anderes als eine Datumszeit einzugeben, unabhängig davon, wie die Daten in den Speicher eingefügt wurden. Letzteres ist wichtig für größere Systeme, in denen mehrere Prozesse direkt mit dem Geschäft interagieren. Dies schließt auch den Versuch ein, fehlerhafte Daten wie den 30. Februar (eines Jahres) hinzuzufügen, da der Februar nur 29 Tage pro Schaltjahr und 28 Tage für Nicht-Schaltjahre haben kann.
Validierungsbeschränkungen
Es gibt auch Validierungsbeschränkungen, die im Datenspeicher implementiert werden können, z. B. das Sicherstellen, dass ein eingefügtes Datum das aktuelle Datum nicht überschreitet oder dass ein Startdatum vor einem Enddatum liegt.
Operationen
Die meisten Datenspeicher verfügen auch über integrierte Operationen / Funktionen wie DateAdd
oder DatePart
in MS SQL Server. Auf diese Weise können Sie bestimmte Daten filtern oder auswählen, während sich die Daten noch im Speicher befinden (noch nicht in der Anwendung abgerufen).
Universell akzeptiertes Format
Durch die Verwendung des nativen Typs müssen andere Entwickler oder Systeme, die ebenfalls mit dem Speicher interagieren, nicht über die winzigen Details zum Speichern dieses primitiven Typs informiert werden. Ist dies nicht der Fall, wenn dieser Typ als Zeichenfolge gespeichert wurde, müssen Sie sicherstellen, dass jeder das Format dieser DateTime
Zeichenfolgendarstellung versteht. Dieses System wird anfällig, wenn Daten verarbeitet werden, die sich über Gebietsschemata, Regionen und Kulturen des Datenursprungs, den physischen Standort einer Anwendung und die Attribute des Endbenutzers / Systems erstrecken, der mit diesen Daten interagiert. Beispiel: Das Datumsformat in einem Land könnte MM / TT / JJJJ lauten (wie in den USA), in einem anderen Land könnte es TT / MM / JJJJ lauten, sodass es fast unmöglich ist, diesen Unterschied festzustellen.
Geschwindigkeit
Die Geschwindigkeit des Abrufs, die Geschwindigkeit der Validierung, die Geschwindigkeit des Betriebs und die Speichereffizienz sind ebenfalls wichtige Faktoren. Beispiel für die Abrufgeschwindigkeit: Datenspeicher ermöglichen Indizes für Spalten, und diese Indizes können im Allgemeinen effizienter verwendet werden, wenn der Typ im systemeigenen Format gespeichert wird.
Anwendung
Datenzugriff
Das Ausführen von Abfragen für den Speicher wird mit dem systemeigenen Typsystem einfacher, da die Entwickler das Speicherformat nicht erraten müssen. Nahezu alle Datenspeicheranwendungsanbieter ( Beispiel: ado.net ) bieten Mechanismen zum Erstellen der richtigen parametrisierten Abfragen basierend auf den übergebenen nativen Typen. Hier ist ein Beispiel für das Hinzufügen des Datumsteils zu einer ado.net-Abfrage für einen SQL Server-Speicher. Dasselbe mit Strings zu tun, wäre sehr umständlich und anfällig für Fehler.
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
Operationen
Die systemeigenen Codetypen bieten auch Standardvorgänge wie den .NET-Typ System.Date
. Operationen sind normalerweise mathematischer Natur wie das Hinzufügen von Datumsangaben, das Ermitteln des Unterschieds zwischen Datumsangaben usw. Auch dies ist bei Zeichenfolgentypen nicht einfach möglich.
Präsentationsfolie
Gebietsschema
Wenn ein primitiver Typ schließlich in eine Zeichenfolge in der Präsentationsebene konvertiert wird ( die richtige Position im Programmstapel, um dies zu tun ), hat der Programmierer jetzt verschiedene Optionen, um ihn entsprechend dem Kontext, in dem er dargestellt wird, korrekt anzuzeigen. Dieser Kontext besteht im Allgemeinen aus der tatsächlichen Bedeutung der Daten und dem Gebietsschema des Benutzers.
Beispiel 1
Eine datetime-Instanz kann basierend auf dem Gebietsschema des Benutzers automatisch formatiert werden.
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
Beispiel 2
Eine Dezimalinstanz könnte einen Betrag (eine Währung) darstellen, und das Gebietsschema des Benutzers sollte dann auch den Betrag entsprechend seiner Präferenz anzeigen. Eine c # -Anwendung zeigt den Wert dann möglicherweise mit an
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
Dies kann kritisch sein, da verschiedene Kulturen unterschiedliche Zahlen anzeigen. In den USA haben Punkt (.) Und Komma (,) genau die umgekehrte Bedeutung wie in den Niederlanden.
Lage
Dies ist sehr DateTime
instanzspezifisch. Ein Datum und eine Uhrzeit stellen ein Ereignis zu einem bestimmten Zeitpunkt dar, dies muss dem Benutzer jedoch in der Regel in Abhängigkeit von seiner eigenen Zeitzone mitgeteilt / präsentiert werden. Beispiel: Eine DateTime
Instanz 2016-09-21T23:38:21.399Z
könnte wie 9/21/2016 5:21 PM
für einen Benutzer in der östlichen Zeitzone in den USA angezeigt werden . Es gibt viele Möglichkeiten, dies zu erreichen, aber es wird nahezu unmöglich, wenn die Datums- / Uhrzeitinstanz als Zeichenfolgentyp oder im Datenspeicher als Zeichenfolgentyp gespeichert wird.
Allgemeine Regel
Die beiden allgemeinen Regeln für eine Anwendung beim Konvertieren eines primitiven Typs in eine Zeichenfolgendarstellung lauten wie folgt
- Wenn Sie Eingaben akzeptieren, konvertieren Sie diese Eingaben so früh wie möglich in den richtigen primitiven Typ im Programmstapel (normalerweise in der Präsentationsebene).
- Konvertieren Sie diese Daten beim Abrufen der anzuzeigenden Daten so spät wie möglich in die Zeichenfolgendarstellung im Programmstapel (ebenfalls in der Regel in der Präsentationsebene).