2010-03-31 49 views
12

Tôi đang sử dụng C# .NET.Cách tốt nhất để cung cấp cài đặt phần mềm là gì?

Trong phần mềm của tôi, tôi đang cung cấp hộp thoại cài đặt thông qua đó người dùng có thể đặt cài đặt ứng dụng mà tôi muốn lưu vào tệp.

Yêu cầu (điển hình):

  1. Mỗi lớp I được xác định sử dụng một số phần của các thiết lập này. Vì vậy, đây nên là toàn cầu cho tất cả các lớp học.
  2. Chúng sẽ được tải trong khi phần mềm được bắt đầu.
  3. Khi nào người dùng thay đổi cài đặt và nhấp 'lưu'/'áp dụng'. Cài đặt hiện tại sẽ thay đổi.

Tôi tự hỏi cách tốt nhất để làm điều này là gì? Ngoài ra, cách tốt nhất để lưu các cài đặt này vào đĩa là gì? Ý tôi là tôi nên tạo đối tượng lớp Settings và tuần tự hóa nó thành 'settings.dat' hoặc cung cấp tệp có cấu trúc như XML/JSON

Điều này là bắt buộc đối với hầu hết các phần mềm khác. Vì vậy, không có bất kỳ mô hình thiết kế cho điều này?

EDIT:

Vâng, đó là một cái gì đó mà tôi không biết. Nó đẹp :). Nhưng nói trong khi người dùng đang sử dụng phần mềm ở giữa, anh ta thay đổi các thiết lập sau đó tất cả các đối tượng khác đang sử dụng các thuộc tính toàn cục Properties.Settings.Default. * Sẽ được thay đổi. Có loại cơ chế thông báo nào không? Một số loại sự kiện?

Trả lời

7

Lớp Cài đặt đi kèm với .Net rất tiện dụng và tôi sử dụng nó cho hầu hết các dự án của mình. Một điều cần lưu ý là mọi phiên bản mới của ứng dụng đều có tệp cài đặt riêng, vì vậy hãy đảm bảo bạn có các cài đặt mặc định có thể nhận biết được. Tất cả các thiết lập sẽ biến mất bất cứ khi nào một EXE mới được phân phối.

Trạng thái toàn cầu rất khó xử lý chính xác, vì vậy tôi thường chuyển các cài đặt liên quan đến các đối tượng khác nhau trong các hàm tạo của chúng hoặc trong các thuộc tính. Và tôi thường không áp dụng thay đổi cài đặt cho các đối tượng đó, vì trong nhiều trường hợp, rất khó để một đối tượng xử lý cài đặt thay đổi một cách thông minh. Thay vào đó, tôi chỉ sử dụng các thiết lập mới cho các đối tượng mới khi chúng được tạo ra. Nếu một thiết lập cần phải được áp dụng ngay lập tức, sau đó tôi chỉ đổ đối tượng cũ và tạo một đối tượng mới. Nó chỉ phụ thuộc vào các chi tiết của ứng dụng.

Nếu bạn có nút Áp dụng trên màn hình cài đặt, thì tôi khuyên bạn nên tải lại và hiển thị tất cả các giá trị sau khi lưu chúng. Bằng cách này, màn hình hiển thị chắc chắn chứa chính xác những gì thực sự được lưu. Điều này có thể quan trọng nếu bất kỳ cài đặt nào được phân tích cú pháp. Tôi đã có người dùng nhập kết hợp tháng và ngày vào một trường cụ thể và định dạng mà họ đã sử dụng khác với những gì được mong đợi, vì vậy giá trị được lưu không chính xác. Bằng cách cập nhật màn hình sau khi Áp dụng, các loại lỗi này có thể được thực hiện rõ ràng.

Tôi hy vọng điều này sẽ hữu ích!

+1

Bạn có thể sử dụng phương thức Nâng cấp (http://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.upgrade.aspx) để di chuyển các cài đặt từ phiên bản trước sang phiên bản mới hơn. Chỉ cần chắc chắn rằng bạn gọi nó chỉ một lần. – Giorgi

+0

@Giorgi - Thú vị! Tôi sẽ phải thử một lần. –

+0

Thêm liên kết này http://msdn.microsoft.com/en-us/library/aa730869%28VS.80%29.aspx để bạn trả lời và cũng có thể chỉnh sửa câu trả lời theo nhận xét của Giorgi. Để tôi có thể chấp nhận nó như một câu trả lời. – claws

13

.Các dự án Net đã có khái niệm về Cài đặt, phạm vi cho người dùng hoặc ứng dụng, sẽ đáp ứng tất cả các yêu cầu của bạn ở trên. Có các lớp để đọc và ghi các cài đặt. Tôi rất muốn khuyên bạn nên xem xét những thứ này thay vì lăn một cái gì đó lên chính mình.

Using Settings in C#

Bạn có thể sử dụng Cài đặt trong một loạt các loại dự án, mặc dù trong một số loại dự án như dự án ASP.Net, Cài đặt người dùng cấp có thể không có sẵn.

+1

@womp, cập nhật giữa các phiên bản khác nhau có thể trở nên khá phức tạp. – Giorgi

+0

Để chắc chắn - phiên bản nói chung là khó khăn, và đây chỉ là một trường hợp khác. Điều này nên tiết kiệm OP khá nhiều thời gian nói chung mặc dù. – womp

+0

các cài đặt này được lưu trữ ở đâu? bên trong hội đồng của dự án đó (dll/exe)? hoặc nó sẽ được lưu trữ trong một số loại tập tin settings.settings mà tôi nên triển khai cùng với phần mềm của tôi. – claws

3

Bạn và cả hai bên phải đều:

Bạn nên tạo lớp Cài đặt là Mặt tiền qua cài đặt .NET. Bằng cách đó bạn sẽ có được những điều tốt nhất của cả hai thế giới: khả năng thử nghiệm của giải pháp được cuộn bằng tay và dễ thực hiện thường được liên kết với Microsoft Silver Bullets.

0

Cá nhân tôi sẽ đi tuyến đường Thuộc tính. Thêm tệp Cài đặt vào thư mục Thuộc tính của ứng dụng của bạn. Điều này cho phép bạn dễ dàng thêm các mục vào tệp app.config của ứng dụng của bạn. Có một lớp .net được tích hợp sẵn mà bạn có thể sử dụng để đọc/ghi các giá trị được tìm thấy trong tệp Cài đặt. Sau đó bạn có thể viết một lớp bao bọc nhỏ đóng gói chức năng đó hoặc chỉ cần sử dụng một .net được tích hợp sẵn trên toàn bộ địa điểm.

Cá nhân tôi sẽ tạo một lớp Singleton theo chủ đề sử dụng lớp trình bao bọc nhỏ trong lớp .net được tích hợp sẵn. Có, đó là một số công việc phụ nhưng nó là một số lượng nhỏ và cung cấp cho bạn một số sức mạnh tuyệt vời trong ứng dụng của bạn cho một chút công việc.

Chỉnh sửa: Xin lỗi đã quên bao gồm liên kết cài đặt MSDN.

http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

0

Như những người khác đã đề xuất sử dụng tính năng Cài đặt là cách để đi. Cài đặt cũng cung cấp các sự kiện khi chúng được cập nhật để bạn có thể xử lý chúng và thực hiện các hành động cần thiết. Bạn cũng có thể sử dụng phương thức Upgrade để di chuyển cài đặt từ phiên bản trước sang phiên bản mới hơn. Chỉ cần chắc chắn rằng bạn gọi nó chỉ một lần (có lẽ từ trình cài đặt).

Cài đặt cũng có thể được giới hạn trong các điều khiển để bạn sẽ không phải ánh xạ chúng theo cách thủ công từ điều khiển đến cài đặt.

Các vấn đề liên quan