2012-06-25 36 views
7

Tôi có một ứng dụng C++ khá lớn (trên Windows, không có nền tảng nào khác được lên kế hoạch), hiện đang lưu trữ tất cả các cài đặt (thậm chí một số loại địa chỉ) trong Windows registry.Thực hành tốt nhất để lưu trữ cài đặt

Đôi khi điều này là bất tiện, vì người dùng gặp khó khăn khi thay đổi mục trong sổ đăng ký. Tôi muốn có cài đặt được phiên bản, vì vậy, cài đặt luôn khớp với mã hiện tại. Tại thời điểm chúng tôi phiên bản reg-tập tin, nhưng bạn không bao giờ chắc chắn, nếu tất cả các tập tin reg đã được thêm vào các máy mục tiêu. Với C#, bạn có thể xác định các giá trị mặc định trong app.config, nhưng không ghi đè lên các thiết lập hiện có. Tôi không biết, nếu một cơ chế hoặc thư viện như vậy tồn tại cho C++.

Tôi muốn có "tính năng" sau:

  • Cài đặt có thể được phiên bản
  • cập nhật đơn giản trên máy mục tiêu (có thể được thực hiện bằng cách sử dụng)
  • Đảm bảo rằng trên bản cập nhật chỉ thiết lập mới được thêm vào và không có cài đặt hiện có nào bị ghi đè bằng giá trị mặc định
  • Thay đổi cài đặt đơn giản cho người dùng
  • Quy trình làm việc tương tự trong Win XP và Win 7

Theo như tôi nhìn thấy nó, có 3 khả năng để lưu trữ các thiết lập trên Windows:

  • Registry tập tin
  • Ini
  • tập tin XML Chỉ

một ứng dụng của chúng tôi bộ sử dụng Qt vào lúc này, nhưng Boost sẽ có sẵn.

Đối với địa chỉ, chúng tôi sẽ đặt chúng vào một số loại sổ địa chỉ XML, nhưng đối với các cài đặt khác, chúng tôi không chắc chắn, thực tiễn tốt nhất là gì.

+2

tôi sẽ đề nghị lựa chọn thay thế khác: YAML/JSON cho con người định dạng có thể đọc được, SQLite để nhúng đơn giản. Về các tệp 'ini', bạn có thể quan tâm đến [Cách phân tích tệp ini với Boost] (http://stackoverflow.com/questions/6175502/how-to-parse-ini-file-with-boost). –

+0

+1 cho tệp Boost/ini, nếu bạn có thể KI SS. – DevSolar

+0

Nếu bạn cần nhiều lớp vùi, tôi sẽ đi cho các tệp XML/JSON. Nếu không, INI có thể là giải pháp đơn giản nhất. – Morwenn

Trả lời

3

Như ý kiến ​​đề cập, cấu trúc khóa/giá trị dựa trên cây là giải pháp phổ biến và thư viện dễ tìm.

Boost's property_tree là một sự lựa chọn tuyệt vời, vì nó là cũng đã được thử nghiệm và có thể dễ dàng được xuất ra dưới dạng XML hoặc JSON

Về yêu cầu của bạn:

  • Cài đặt có thể được phiên bản

Có! Đặt "phiên bản" thành khóa cấp cao nhất. Làm cho nó dễ dàng so sánh với các phiên bản khác.

Bạn cũng có thể phân loại cài đặt của mình thành các nút cây khác nhau và cung cấp cho mỗi nút một phiên bản.

  • Simple cập nhật trên máy mục tiêu (có thể được thực hiện bằng cách sử dụng)

Có ứng dụng của bạn làm điều đó khi nó chạy. Xem bên dưới.

  • Đảm bảo rằng trên bản cập nhật cài đặt chỉ mới được thêm vào và không có cài đặt hiện được ghi đè bằng các giá trị mặc định
  • thay đổi đơn giản trong cài đặt cho người dùng
  • Cùng workflow theo Win XP và Win 7

Khi cài đặt thay đổi từ phiên bản này sang phiên bản khác, thường những thay đổi này rơi vào ba danh mục. Cần có thuộc tính mới, cài đặt cũ bị bỏ qua và một số cài đặt thay đổi định dạng mong muốn của chúng. Ví dụ. "32 Fahrenheit" trở thành "0 C"

Khi ứng dụng của bạn khởi:

  • tải các tập tin cấu hình hiện tại, bất kể phiên bản của nó.
  • Nếu phiên bản không phù hợp với những gì hiện tại cho các ứng dụng:
    • Tạo một cây sở hữu trống mới cho cấu hình mới
    • Đối với mỗi nút trong cây, có một tập hợp các tên thuộc tính mong đợi, và một chức năng con trỏ hoặc tương tự để có được thiết lập này nếu nó vắng mặt trong cây của tập tin cũ. Nếu cài đặt thay đổi định dạng, hãy đặt tên mới.
    • Tìm kiếm từng cài đặt trong cây cũ, sao chép nó nếu nó được tìm thấy và sử dụng kết quả của hàm được cung cấp nếu không.
    • Lưu tệp cài đặt mới của bạn.

của bạn "thiếu thiết lập" các chức năng có thể:

  • Return giá trị mặc định không đổi.
  • Query cây cho một khung cảnh khác nhau và chuyển đổi nó (với giá trị mặc định nếu cài đặt cũ không tìm thấy một trong hai)
  • Hãy hỏi người dùng
Các vấn đề liên quan