Cách tốt nhất (và vị trí) để lưu trữ các cài đặt không phải BLOB là gì?
Trên Windows, có vẻ chấp nhận được việc sử dụng sổ đăng ký. Theo tôi, sổ đăng ký là một hệ thống kém phát triển, và thay vào đó, một tệp văn bản đơn giản trong Users\Username\AppData
thư mục nên được ưu tiên. Điều này dễ sao lưu hơn, ít nguy hiểm hơn cho người dùng sửa đổi và dễ dàng dọn dẹp hơn.
Trên Linux và hầu hết các Unix, Vị trí ưa thích là /home/user/.config/appname
dành cho cài đặt dành riêng cho người dùng và /etc/
cho cài đặt toàn cầu (toàn hệ thống). Vị trí ít được ưu tiên (nhưng có thể chấp nhận) cho cài đặt người dùng là ~/.appname
, nhưng điều này thường không được ưa chuộng. Các tệp này phải được người dùng chỉnh sửa, vì vậy định dạng có thể đọc được của con người luôn được ưu tiên.
Tôi không đồng ý với hầu hết mọi người rằng XML là một định dạng có thể chấp nhận để lưu trữ dữ liệu không phải là blob. Theo tôi, đó là một định dạng quá phức tạp và quá phức tạp cho những gì thường kết thúc là những mẩu dữ liệu có cấu trúc rất nhỏ. Tôi thích xem các tệp trong các cặp YAML, JSON, ASN.1, name = value hoặc các định dạng tương tự. Có quá nhiều cú pháp làm cho người dùng quá dễ dàng làm rối và để tệp ở định dạng không hợp lệ.
Chúng ta nên theo từng hệ thống mặc định hoặc có một giải pháp thống nhất?
Điều đó hoàn toàn phụ thuộc vào bạn, nhưng hãy ghi nhớ một số điều:
- Các nền tảng như * nix có những hạn chế nghiêm ngặt về vị trí có thể ghi. Nghiêm khắc hơn Windows. Vì thế:
- Nơi duy nhất bạn nên viết cho bất cứ điều gì là trong thư mục nhà của người dùng.
- Trừ khi ứng dụng của bạn là một dịch vụ hệ thống; trong trường hợp đó, tất cả các tệp dữ liệu có thể thay đổi sẽ được ghi vào
/var/
. Các tệp dữ liệu không thể thay đổi phải được giữ trong thư mục ứng dụng của bạn trong /usr/share/
hoặc /usr/local/share/
hoặc/opt/
- File cấu hình trong
/etc/
nên không bao giờ được ghi vào bằng ứng dụng khi nó đang chạy, thậm chí nếu nó có ghi truy cập vào chúng. /etc/
nên là kho lưu trữ cho các hành vi mặc định và không có gì khác.
- Kế hoạch ứng dụng của bạn phải được cài đặt theo một trong ba nơi:
/usr/local/
, /opt/appname
, hoặc /home/username/appname
.
- Blobs nên được lưu trữ cùng với các tệp cấu hình khác nếu chúng được thay đổi. Đó là nói chung thích hợp hơn để sử dụng một định dạng người dùng có thể chỉnh sửa, vì vậy cái gì đó như SQLite hoặc Berkeley DB được ưa thích (kể từ khi có các công cụ dòng lệnh cho mỗi), nhưng không cần thiết.
- Trên Windows, các ứng dụng của bạn chỉ nên ghi vào thư mục Người dùng. Vị trí chuẩn hóa cho các tệp dữ liệu là
Users\User\AppData
. Không nơi nào khác có vẻ chấp nhận được.
- Trên Mac OS X, các cài đặt ứng dụng của bạn sẽ được lưu trữ
~/Library/Preferences
cùng với tất cả các tệp nguyên bản của các ứng dụng khác. plist
dường như là định dạng ưa thích, nhưng bạn sẽ muốn kiểm tra kỹ các nguyên tắc của Apple.
Và cách di động tốt nhất là gì?
Không có "tốt nhất", phải trung thực. Chỉ có những hạn chế và kỳ vọng cụ thể về nền tảng. Đề nghị của tôi là gắn bó với các phương tiện dành riêng cho nền tảng, ngay cả khi nó có nghĩa là viết thêm mã.