Khi nào nên sử dụng Hằng số so với Tệp cấu hình để duy trì Cấu hình


20

Tôi thường tự đấu tranh về việc có nên đặt một số khóa nhất định trong web.config hoặc trong lớp Constants.cs hoặc đại loại như thế này không.

Ví dụ: nếu tôi muốn lưu trữ các khóa cụ thể của ứng dụng cho bất kỳ trường hợp nào .. Tôi có thể lưu trữ và lấy nó từ cấu hình web của mình thông qua các khóa tùy chỉnh hoặc sử dụng nó bằng cách tham chiếu hằng số trong lớp hằng số của tôi.

Khi nào bạn muốn sử dụng Hằng số trên các phím cấu hình?

Câu hỏi này thực sự áp dụng cho bất kỳ ngôn ngữ nào tôi nghĩ.

Câu trả lời:


20

Cá nhân tôi sẽ chỉ sử dụng các hằng số làm giá trị mặc định và để chúng bị ghi đè bởi các giá trị từ tệp cấu hình.

Nếu ứng dụng nhận các đối số dòng lệnh, thì chúng sẽ lần lượt ghi đè các tham số tệp cấu hình.


3

Giá trị trong tệp cấu hình khó duy trì hơn giá trị trong lớp hằng, vì trình biên dịch không kiểm tra nó tồn tại và có đúng loại không, IDE thường không cung cấp hỗ trợ mã cho nó và vì đó là một cú pháp khác mà bạn phải chuyển sang trong khi lập trình.

Vì vậy, tôi sẽ đề nghị đặt:

  • Các giá trị sẽ giống nhau trong tất cả các cài đặt như các hằng số trong mã. Có một số lợi thế khi đặt chúng vào một lớp hằng (bạn có thể dễ dàng thử các giá trị khác nhau để xem cách chúng hoạt động) và đưa chúng vào mô-đun sử dụng chúng (bạn không phải mở một tệp khác khi sửa đổi mô-đun đó và tránh một tệp mà mọi người sẽ chỉnh sửa gây ra xung đột trong kiểm soát phiên bản).
  • Các giá trị (có thể) cần được thay đổi mỗi lần cài đặt thành tập tin cấu hình. Và dù sao bạn cũng có thể muốn đặt mặc định vào mã, vì vậy nếu giá trị không được đặt trong cấu hình, ứng dụng vẫn (bằng cách nào đó) hoạt động.

Ý bạn là gì đúng loại ... khóa cấu hình ... đó là xml ...
WeDoTDD.com 23/11/11

@CoffeeAddict: Kiểu đúng có nghĩa là, nếu bạn có tùy chọn yêu cầu số và tệp cấu hình của bạn có chuỗi không phải là số, bạn sẽ không tìm thấy cho đến khi chạy. Và "khóa cấu hình" là bất cứ thứ gì bạn sử dụng để lấy giá trị từ tệp cấu hình, trong trường hợp XML là đường dẫn phần tử. Ok, bạn có thể có một lược đồ và lớp tương ứng (có xsdcông cụ để tạo cái này từ cái kia) và sử dụng cấu hình với XMLSerializer(cách hợp lý nhất để xử lý XML trong C #), vì vậy bạn có thể xác thực trước, nhưng vẫn còn một số bổ sung công việc.
Jan Hudec

Không đồng ý: "Giá trị trong tệp cấu hình khó duy trì hơn giá trị trong lớp hằng" - phụ thuộc vào cách bạn đã mã hóa cấu hình của mình và số lượng các mục có thể định cấu hình này mà bạn có: Đừng lặp lại chính mình!
Kỹ sư

3

Thay đổi hằng yêu cầu xây dựng lại ứng dụng hầu hết các trường hợp. Nói cách khác, hằng số vẫn là hằng số khi ai đó không có quyền truy cập vào mã.

Vì vậy, bất kỳ thông tin nào mà người dùng cuối cần cung cấp (và cần thay đổi) nên có trong các tệp cấu hình. Hầu hết những người khác cần phải đi theo hằng số. Tuy nhiên, phải có mặc định hợp pháp hoặc xử lý ngoại lệ lỗi nếu các tệp cấu hình bị hỏng.

Các phần tử không phải là một phần của sự trừu tượng hóa của đối tượng (nghĩa là nếu các hằng số không được sửa đổi bởi các đối tượng (gọi) bên ngoài có khả năng bị ẩn và về cơ bản có nghĩa là chúng sẽ tốt hơn là các hằng riêng tư hơn các tệp cấu hình.

Khi có nhiều thành phần cấu hình liên quan đến các đối tượng khác nhau, không liên quan đến nhau và khi có quá nhiều đối tượng cần phải rút các tệp cấu hình (giống hoặc của chính chúng), thì rất có thể những thứ này phải là hằng số.


1

Một nguyên tắc đơn giản là tạo các hằng số khi bạn biết bạn sẽ làm việc với một bộ giá trị cố định mà bạn biết có thể được áp dụng cho bất kỳ bối cảnh cụ thể nào mà không cần thay đổi; cung cấp cấu hình bên ngoài cho mọi thứ khác.

Một ví dụ điển hình về hằng số sẽ là nếu tất cả các hình dạng bạn làm việc có thể là SQUAREhoặc ROUND. Trong hầu hết các ngôn ngữ, bạn sẽ có thể tận dụng thực tế là giá trị này không thay đổi theo thời gian, bằng cách chỉ phân bổ một lần và tối ưu hóa cách truy cập.

Các cấu hình bên ngoài là cần thiết khi bạn cần truy xuất giá trị một cách linh hoạt vì bạn không thể giả định trước giá trị bạn sẽ làm việc với, nhưng điều đó không có nghĩa là bạn phải thực hiện bất kỳ sự đánh đổi hiệu suất nào: đối với các giá trị cấu hình mà bạn mong đợi Hiện tại, khi được thực hiện một cách chính xác, bạn chỉ phải trả giá khi lấy chúng một lần và vẫn nhận được tất cả các lợi ích.



0

Hằng số theo định nghĩa là một vị trí bộ nhớ cho một giá trị không nên thay đổi (chẳng hạn như PI).

Tôi giả sử bạn có nghĩa là 'tham số' và không phải là hằng số

Ngoài những gì đã nói, lưu ý rằng việc hiển thị các biến cho đầu vào của người dùng từ tệp cấu hình có thể gây hại cho ứng dụng.

Khi có thể, không để lộ các giá trị trong tệp cấu hình mà không xác thực chúng trong mã để kiểm tra độ tỉnh táo. Ngoài ra, tôi khuyên bạn không nên đặt các tham số quy tắc kinh doanh (chẳng hạn như mức lương tối đa, v.v.) trong các tệp cấu hình và không sử dụng hằng số cho các tham số đó. Các giá trị này phải được lưu trữ trong cơ sở dữ liệu với các định nghĩa bảng thích hợp để một số bảo mật được thực thi khi chúng được thay đổi và bạn có thể tự động tạo các phiên bản của các giá trị dữ liệu (sử dụng các bản ghi procs hoặc db được lưu trữ). Tất nhiên, điều này phụ thuộc vào mức độ nhạy cảm của ứng dụng của bạn.

Nếu bạn từng sử dụng tập tin cấu hình để lưu trữ dữ liệu, hãy đảm bảo rằng bạn đã phiên bản chúng.

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.