Типи існують з причини, якби вони не додавали користі, ми б їх не мали і не використовували б, і ми просто мали б "тип" і все було б так. Вони не тільки зручні, вони також додають безпеку та ефективність. Далі наведено перелік того, чому завжди слід зберігати типи у їх рідному форматі, а не як рядки . Я використовував DateTime
як приклад більшу частину часу, але ті самі принципи застосовуються для будь-якого примітивного типу, як цілі числа, десяткові числа, двійкові тощо.
Зберігання даних
Обмеження
Тип обмеження
Практично всі сховища даних дозволяють задавати обмеження на дані, сюди входять обмеження типу. Однією з головних переваг визначення DateTime
примірника є те, що збережені дані будуть обмежені цим типом. Ніколи не вдасться ввести щось, окрім часу дати, незалежно від того, як дані були вставлені в магазин. Останнє важливо для великих систем, де є кілька процесів, які взаємодіють безпосередньо з магазином. Сюди також входить спроба додати несправні дати, такі як 30 лютого (будь-якого року), оскільки лютий може мати лише 29 днів у високосний рік та 28 днів у не високосні роки.
Обмеження на перевірку
Існують також обмеження перевірки, які можуть бути реалізовані в сховищі даних, наприклад, гарантуючи, що вставлена дата не перевищує поточну дату або що дата початку настає перед кінцевою датою.
Операції
Більшість сховищ даних також мають вбудовані операції / функції, такі як DateAdd
або DatePart
в MS Sql Server. Це дозволяє почати фільтрувати або вибирати конкретні дані, поки дані все ще зберігаються (ще не отримано в програмі).
Універсально прийнятий формат
Використовуючи нативний тип, іншим розробникам або системам, які також взаємодіють із магазином, не потрібно повідомляти про детальні відомості про збереження цього примітивного типу. Це не так, якщо цей тип зберігався як рядок, то ви повинні переконатися, що всі розуміють формат цього DateTime
рядкового подання. Ця система стає крихкою при роботі з даними, що охоплюють локалі, регіони та культури за походженням даних, фізичним розташуванням програми та атрибутами кінцевого користувача / системи, яка взаємодіє з цими даними. Приклад: формат дати в одній країні може бути MM / dd / yyyy (як в США), але в іншій він може бути dd / MM / yyyy, виявити, що різниця стає майже неможливою.
Швидкість
Швидкість пошуку, швидкість перевірки, швидкість операцій та ефективність зберігання - теж важливі фактори. Приклад швидкості пошуку: сховища даних дозволяють індексувати стовпці, і ці індекси, як правило, можуть бути більш ефективно використані, якщо тип зберігається у рідному форматі.
Застосування
Доступ до даних
Виконання запитів у магазині стає простішим за допомогою системи рідного типу як розробників, знову ж таки, не потрібно здогадуватися про формат зберігання. Практично всі постачальники програм зберігання даних ( наприклад: ado.net ) надають механізми для створення відповідних параметризованих запитів на основі власних типів, переданих тут. Ось приклад додавання частини дати до запиту ado.net до магазину Sql Server, те ж саме з рядками було б дуже громіздким і схильним до помилок.
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
Операції
Нативні типи в коді також передбачають стандартні операції, такі як тип .net System.Date
. Операції, як правило, мають математичний характер, як додавання дат, знаходження різниці між датами тощо. Знову ж, це неможливо зробити легко для типів рядків.
Презентаційний шар
Місцевий пошук
Коли примітивний тип остаточно перетворюється на рядок у шарі презентації ( правильне розташування в програмному стеку, щоб це зробити ), програміст тепер має різні варіанти його правильного відображення відповідно до контексту, в якому він представлений. Цей контекст, як правило, складається з фактичного значення даних та місцевості користувача.
Приклад 1
Екземпляр дати може бути автоматично відформатований на основі мови користувача.
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
Приклад 2
Десятковий екземпляр може представляти суму (валюту), а локальна частина користувача також повинна відображати суму відповідно до їх переваг. Потім програма c # може відображати значення, використовуючи
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
Це може бути критично важливим, оскільки різні культури по-різному відображають цифри. У американський період (.) І кома (,) мають точно зворотне значення, як у Нідерландах.
Місцезнаходження
Це дуже специфічно для DateTime
випадків. Дата та час являють собою події в конкретний момент часу, але зазвичай це потрібно передати / представити користувачеві залежно від їх власного часового поясу. Приклад: DateTime
екземпляр 2016-09-21T23:38:21.399Z
може бути відображений як 9/21/2016 5:21 PM
для користувача у східному часовому поясі в США. Існує багато способів цього досягти, але це стає майже неможливим, якщо екземпляр часу дати зберігається в пам'яті як тип рядка або в сховищі даних як тип рядка.
Загальне правило
Загальні 2 правила для програми дотримуються, коли мова йде про перетворення будь-якого примітивного типу в рядкове представлення, такі
- Приймаючи вхід, перетворіть цей вхід у правильний примітивний тип якомога раніше у стеку програми (як правило, у презентаційному шарі)
- Отримавши дані, що відображаються, перетворіть ці дані в рядкове представлення якомога пізніше в стеку програми (знову ж таки, зазвичай, у презентаційному шарі)