Lưu trữ và duy trì các đối tượng nối tiếp trong C #


8

Các thực tiễn tốt nhất để lưu trữ và duy trì các đối tượng nối tiếp trong C # là gì? Bất kỳ chiến lược hoặc mô hình áp dụng?

Những gì tôi đã tin tưởng cho đến nay là:

  • Thích Json hơn XML, cả về không gian và tốc độ, nhưng xml dễ dàng truy vấn / khai thác dữ liệu hơn thông qua LINQ sang XML cho các tập dữ liệu lớn hơn.
  • Đối với mỗi thuộc tính duy nhất, ánh xạ rõ ràng đến một tên nối tiếp. Trong tương lai, khi bạn cần đổi tên một tài sản, dữ liệu nối tiếp của bạn sẽ không bị hỏng. Thuộc tính giúp với điều này.
  • Lưu trữ một số loại thông tin phiên bản trên đối tượng được tuần tự hóa, trong trường hợp bạn cần di chuyển hàng loạt dữ liệu trong tương lai

Cập nhật: (mà tôi phát hiện ra một cách khó khăn)

  • Lưu trữ tất cả các thời gian một cách thống nhất trong toàn bộ ứng dụng và trong tất cả các phiên bản. Cả về định dạng và múi giờ.

Những hoạt động sẽ được thực hiện trên những dữ liệu nối tiếp? Chỉ đọc / viết hoặc một cái gì đó phức tạp hơn?
Euphoric

Đó là một câu hỏi chung nhưng trong trường hợp của tôi, tôi cần lưu trữ các đối tượng cài đặt nhỏ có thể hoặc không thể cập nhật.
Mihalis Bagos

2
4. Thực hiện theo các quy tắc cho đến khi nó có ý nghĩa hơn để phá vỡ các quy tắc.
Robert Harvey

1
Ý anh là gì? "Các quy tắc" trong trường hợp này là gì?
Mihalis Bagos

Câu trả lời:


9

Tôi đã thực hiện khá nhiều tuần tự hóa trong những năm qua. Dưới đây là một số điều chúng tôi đã đưa ra:

  • Thích các định dạng dễ đọc của con người hơn các định dạng nhị phân. Tôi thường thích Xml hơn Json vì bạn có thể sử dụng Xslt để chuyển đổi Xml khi bạn cần nâng cấp phiên bản.

  • Bất kể bạn đang tuần tự hóa công cụ nào, logic lưu trữ dữ liệu và lưu trữ dữ liệu sẽ cho phép phiên bản dữ liệu được tuần tự hóa. Thông tin phiên bản có lẽ nên nằm ngoài dữ liệu được tuần tự hóa, giúp dễ dàng truy cập hơn và chọn chiến lược khử lưu huỳnh phù hợp.

  • Việc tuần tự hóa của bạn nên có các bài kiểm tra đơn vị chạy cả hai cách. IE, bạn nên có một bài kiểm tra khử lưu lượng dữ liệu và xác nhận rằng bạn nhận được mọi thứ được nhập chính xác. Và bạn nên có một cái gì đó tuần tự hóa dữ liệu và xác nhận nó xuất hiện dưới dạng json và xml chính xác.

  • Nếu quan điểm của tuần tự hóa nói là đa nền tảng, hãy thử nghiệm với nền tảng khác. Có lẽ bây giờ không còn nhiều vấn đề khi các nền tảng đã trưởng thành, nhưng có những lúc mọi thứ không đồng ý về cách json nên được định dạng.


4

Điểm đề cập là thực tế và tốt để ghi nhớ. Tôi muốn đề cập đến các loại tuần tự hóa khác nhau có thể hữu ích để xem xét tùy thuộc vào nhu cầu ứng dụng của bạn.

  • Tuần tự nhị phân - nó sử dụng mã hóa nhị phân để tạo ra tuần tự hóa nhỏ gọn cho các mục đích sử dụng như storagehoặc socket-based network luồng.
  • Tuần tự hóa XML - nó tuần tự hóa các trường và thuộc tính công khai của một đối tượng, hoặc các tham số và trả về giá trị của các phương thức, thành một luồng XML phù hợp với tài liệu ngôn ngữ định nghĩa Lược đồ XML (XSD) cụ thể. Thông tin thêm có sẵn trong không gian tên System.Xml.Serialization .
  • Tuần tự hóa SOAP - đó là một hương vị khác nhau của tuần tự hóa XML, nơi nó có thể được sử dụng để tuần tự hóa các đối tượng thành các luồng XML phù hợp với đặc tả SOAP. SOAP là một giao thức dựa trên XML, được thiết kế đặc biệt để vận chuyển các cuộc gọi thủ tục bằng XML. Như với tuần tự hóa XML thông thường, các thuộc tính có thể được sử dụng để kiểm soát các thông báo SOAP theo kiểu chữ được tạo bởi một dịch vụ Web XML.

Thêm thông tin từ nguồn chính thức - lập trình MSDN C #

Ngoài ra tất cả điều này cần phải được thực hiện trong quy trình SDLC (có nghĩa là có môi trường để kiểm tra, kiểm soát phiên bản, v.v.)


Tại sao bạn muốn lưu trữ dưới dạng nhị phân hoặc xà phòng? Theo như tôi hiểu thì xà phòng bị che khuất để tránh hỏng dữ liệu, một thứ không phải là vấn đề trong khi lưu trữ trong một hệ thống đã biết.
Mihalis Bagos

1
đó là về tốc độ, nhanh nhất là tuần tự nhị phân.
Yusubov

BinaryFormatter cũng là tùy chọn dung sai ít thay đổi nhất. Chúng tôi đã có những cuộc đấu tranh bất tận với nó và bây giờ ước gì chúng tôi sẽ không bao giờ sử dụng nó. Xem: stackoverflow.com/a/703361/505697
HappyCat

chắc chắn, mọi thứ đều có vấn đề riêng của nó, và phụ thuộc vào nơi nó được sử dụng. như đã đề cập, để tương thích đa nền tảng, đây không phải là một lựa chọn lý tưởng, đây là lúc tuần tự hóa XML chiếm lĩnh giai đoạn.
Yusubov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.