Các loại tồn tại vì một lý do, nếu chúng không có lợi ích thì chúng ta sẽ không có chúng và sẽ không sử dụng chúng và chúng ta sẽ chỉ có "loại" và mọi thứ sẽ như vậy. Chúng không chỉ thuận tiện mà còn thêm an toàn và hiệu quả. Sau đây là danh sách lý do tại sao bạn phải luôn duy trì các loại ở định dạng gốc của chúng chứ không phải dưới dạng chuỗi . Tôi đã sử dụng DateTime
như một ví dụ hầu hết thời gian nhưng các nguyên tắc tương tự áp dụng cho bất kỳ loại nguyên thủy nào như số nguyên, số thập phân, nhị phân, v.v.
Kho dữ liệu
Những ràng buộc
Loại ràng buộc
Hầu như tất cả các cửa hàng dữ liệu cho phép chỉ định các ràng buộc trên dữ liệu, điều này bao gồm các ràng buộc kiểu. Một trong những lợi ích chính của việc chỉ định một DateTime
thể hiện là dữ liệu được lưu trữ sẽ bị ràng buộc với loại đó. Sẽ không bao giờ có thể nhập bất cứ thứ gì ngoài thời gian ngày bất kể dữ liệu được chèn vào cửa hàng như thế nào. Cái sau rất quan trọng đối với các hệ thống lớn hơn, nơi có nhiều quy trình tương tác trực tiếp với cửa hàng. Điều này cũng bao gồm cố gắng thêm các ngày bị lỗi như ngày 30 tháng 2, (của bất kỳ năm nào) vì tháng hai chỉ có thể có 29 ngày trong một năm nhuận và 28 ngày cho các năm không nhuận.
Các ràng buộc xác nhận
Ngoài ra còn có các ràng buộc xác thực có thể được triển khai trong Kho lưu trữ dữ liệu như đảm bảo rằng ngày được chèn không vượt quá ngày hiện tại hoặc ngày bắt đầu xảy ra trước ngày kết thúc.
Hoạt động
Hầu hết các cửa hàng dữ liệu cũng đã được xây dựng trong các hoạt động / chức năng như DateAdd
hoặc DatePart
trong MS Sql Server. Điều này cho phép bạn bắt đầu lọc hoặc chọn dữ liệu cụ thể trong khi dữ liệu vẫn còn trong cửa hàng (chưa được truy xuất vào ứng dụng).
Định dạng được chấp nhận toàn cầu
Bằng cách sử dụng loại bản địa, các nhà phát triển hoặc hệ thống khác cũng tương tác với cửa hàng không cần phải được thông báo chi tiết về cách thức loại nguyên thủy đó được lưu trữ. Đây không phải là trường hợp nếu loại đó được lưu trữ dưới dạng một chuỗi, thì bạn phải đảm bảo rằng mọi người đều hiểu định dạng của DateTime
biểu diễn chuỗi đó . Hệ thống này trở nên mong manh khi xử lý dữ liệu bao gồm các vùng, vùng và văn hóa trong nguồn gốc dữ liệu, vị trí vật lý của ứng dụng và các thuộc tính của người dùng / hệ thống cuối đang tương tác với dữ liệu đó. Ví dụ: định dạng ngày ở một quốc gia có thể là MM / dd / yyyy (như ở Hoa Kỳ) nhưng ở một quốc gia khác có thể là dd / MM / yyyy, việc phát hiện sự khác biệt đó gần như không thể.
Tốc độ
Tốc độ truy xuất, tốc độ xác nhận, tốc độ hoạt động và hiệu quả lưu trữ là những yếu tố quan trọng. Ví dụ về tốc độ truy xuất: các kho lưu trữ dữ liệu cho phép các chỉ mục trên các cột và các chỉ mục này thường có thể được sử dụng hiệu quả hơn nếu loại được lưu trữ ở định dạng gốc.
Ứng dụng
Truy cập dữ liệu
Việc thực hiện các truy vấn đối với cửa hàng trở nên đơn giản hơn bằng cách sử dụng hệ thống kiểu gốc làm nhà phát triển, một lần nữa, không phải đoán định dạng lưu trữ. Hầu như tất cả các nhà cung cấp ứng dụng lưu trữ dữ liệu ( ví dụ: ado.net ) đều cung cấp các cơ chế để tạo các truy vấn được tham số hóa phù hợp dựa trên các kiểu gốc được truyền vào. Dưới đây là ví dụ về việc thêm phần Ngày vào truy vấn ado.net đối với cửa hàng Sql Server, làm tương tự với các chuỗi sẽ rất cồng kềnh và dễ bị lỗi / dễ bị lỗi.
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
Hoạt động
Các kiểu gốc trong mã cũng cung cấp cho các hoạt động tiêu chuẩn như loại .net System.Date
. Các hoạt động thường có tính chất toán học như thêm ngày, tìm sự khác biệt giữa các ngày, v.v ... Một lần nữa, điều này không thể thực hiện dễ dàng trên các loại chuỗi.
Lớp trình bày
Địa phương
Khi một kiểu nguyên thủy cuối cùng được chuyển đổi thành một chuỗi trong lớp trình bày ( vị trí chính xác trong ngăn xếp chương trình để làm như vậy ), lập trình viên hiện có nhiều tùy chọn để hiển thị chính xác theo ngữ cảnh được trình bày. Bối cảnh này thường bao gồm ý nghĩa thực tế của dữ liệu và ngôn ngữ của người dùng.
ví dụ 1
Một thể hiện datetime có thể được định dạng tự động dựa trên miền địa phương của người dùng.
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
Ví dụ 2
Một ví dụ thập phân có thể đại diện cho một số tiền (tiền tệ) và ngôn ngữ của người dùng sau đó cũng sẽ hiển thị số tiền theo sở thích của họ. Sau đó, một ứng dụng c # có thể hiển thị giá trị bằng cách sử dụng
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
Điều này có thể rất quan trọng vì các nền văn hóa khác nhau hiển thị số lượng khác nhau. Trong thời kỳ Hoa Kỳ (.) Và dấu phẩy (,) có nghĩa ngược chính xác như ở Hà Lan.
Vị trí
Điều này rất cụ thể cho các DateTime
trường hợp. Một ngày và thời gian biểu thị một sự xuất hiện tại một thời điểm cụ thể nhưng điều này thường phải được truyền đạt / trình bày cho người dùng tùy thuộc vào múi giờ của họ. Ví dụ: một DateTime
thể hiện 2016-09-21T23:38:21.399Z
có thể được hiển thị như 9/21/2016 5:21 PM
đối với người dùng ở múi giờ miền Đông Hoa Kỳ. Có nhiều cách để thực hiện điều này nhưng nó trở nên bất khả thi nếu trường hợp thời gian ngày được giữ trong bộ nhớ dưới dạng kiểu chuỗi hoặc trong kho lưu trữ dữ liệu dưới dạng kiểu chuỗi.
Nguyên tắc chung
2 quy tắc chung cho một ứng dụng tuân theo khi chuyển đổi bất kỳ kiểu nguyên thủy nào sang biểu diễn chuỗi là như sau
- Khi chấp nhận đầu vào, chuyển đổi đầu vào đó thành kiểu nguyên thủy chính xác càng sớm càng tốt trong ngăn xếp chương trình (thường là trong lớp trình bày)
- Khi truy xuất dữ liệu sẽ được hiển thị, chuyển đổi dữ liệu đó thành biểu diễn chuỗi càng muộn càng tốt trong ngăn xếp chương trình (một lần nữa, thường là trong lớp trình bày)