2013-09-02 45 views
5

Tôi có một loạt các cấu hình trong khi chúng có thể thay đổi trong tương lai, khả năng là chúng sẽ không bao giờ phải thay đổi.Bạn có gặp khó khăn khi cài đặt mã cứng trong lớp không?

Nếu thiếu hoặc không chính xác thì một tính năng nhất định của hệ thống của tôi sẽ không hoạt động chính xác.

Nếu những thứ này vẫn được truy xuất thì có thể là cấu hình, hoặc xml, cơ sở dữ liệu vv và sẵn sàng cho người dùng cuối thay đổi - hoặc đây là một tình huống tốt. họ?

Tôi đã dành nhiều thời gian thay đổi suy nghĩ về điều này.

+1

Nếu hóa ra bạn cần sửa đổi các cài đặt này, bạn sẽ cần phải thực hiện một bản phát hành mới thay vì chỉnh sửa các thông số này trong xml và khởi động lại hệ thống. Cẩn tắc vô ưu. –

+1

Giống như nhiều thứ, đây là sự cân bằng. Nếu bạn nghĩ rằng những tính chất này sẽ không thay đổi trong tương lai và nỗ lực đưa chúng vào một thuộc tính (đọc, tiêm chúng) là không đáng kể, hãy đặt chúng trong một lớp học. Một câu hỏi đặt ra cho chính bạn là: khi một hằng số trở thành cấu hình bên ngoài? – Augusto

+0

Tôi thường sử dụng các tệp thuộc tính. Và khi định nghĩa thuộc tính không được tìm thấy trong tệp thuộc tính, tôi sử dụng giá trị mặc định được mã hóa cứng làm dự phòng. – h3nrik

Trả lời

3

Ước tính của nhà thiết kế về khả năng cần thay đổi không phải là một tiêu chí đáng tin cậy để đưa ra quyết định, bởi vì việc sử dụng các chương trình của chúng tôi thực tế có những cách đặc biệt để chứng minh chúng tôi sai.

Thay vì tự hỏi bản thân "khả năng thay đổi là gì?", Hãy tự hỏi "liệu người dùng cuối có thực hiện thay đổi không?" Nếu câu trả lời là "có", hãy làm cho người dùng có thể thay đổi; nếu không, làm cho nó có thể thay đổi chỉ thông qua mã của bạn.

Một cơ chế cụ thể mà qua đó bạn thực hiện điều gì đó có thể thay đổi (cơ sở dữ liệu, tệp cấu hình, tệp XML tùy chỉnh, v.v.) không quan trọng nhiều. Một điều quan trọng là có mặc định tốt cho các thiết lập bị thiếu, để người dùng cuối của bạn sẽ có thời gian khó khăn hơn phá vỡ hệ thống của bạn bằng cách cung cấp một phần cấu hình.

0

Nếu cấu hình sẽ không bao giờ thay đổi như bạn đã nói thì tốt nếu bạn khai báo các thuộc tính đó dưới dạng biến trong giao diện hoặc một lớp riêng biệt và sử dụng hằng số này thông qua chương trình.
Các tệp thuộc tính riêng biệt chỉ được sử dụng khi một số giá trị thuộc tính không cố định và phụ thuộc vào môi trường như tên cơ sở dữ liệu, tên người dùng, mật khẩu, vv. , tablenames if any etc.

4

Thực tiễn tốt nhất là sử dụng bất kỳ loại tệp cấu hình hoặc thuộc tính nào và sử dụng giá trị mặc định và không an toàn nếu tệp bị hỏng/mất tích. Cách tiếp cận này có những ưu điểm sau:

  • Nó có thể dễ dàng được công nhận là một tập tin cấu hình nghĩa dev khác sẽ không cần phải bổ nhào qua lớp học của bạn để thay đổi một tham số
  • file tài sản có thể được viết bằng cách xây dựng các công cụ như kiến , vì vậy nếu bạn có ví dụ một adresse máy chủ thử nghiệm và một địa chỉ máy chủ hiệu quả các nhiệm vụ kiến ​​có thể thay đổi nội dung cho phù
  • nó hoạt động với các giá trị mặc định ngay cả khi không nó

Nhược điểm là sự phức tạp thêm.

+0

Nếu một trong các cấu hình là một cụm từ thông dụng được sử dụng trong hàm cho mẫu phù hợp với một giá trị được thông qua, điều đó có ảnh hưởng đến ý kiến ​​của bạn không? –

+0

Tôi không thấy một regex như một cấu hình, và không có tôi sẽ không đặt chúng vào một tập tin cấu hình bên ngoài. Tôi sẽ propapsulate các tùy chọn khác nhau và đặt mode1, mode2, vv. vào cấu hình.Cấu hình không nên bao gồm dữ liệu triển khai kỹ thuật chi tiết (bạn sẽ không đặt hình ảnh như bị ngắt vào cấu hình, nhưng bạn sẽ đặt liên kết đến đó nếu bạn bắt được trôi) – for3st

0

Tùy thuộc vào đơn đăng ký của bạn. Như một đường cơ sở, thiết kế tốt của nó để sử dụng các biến tĩnh để giữ dữ liệu mà chương trình của bạn sẽ cần, thay vì các chuỗi mã hóa cứng và các số nguyên trên khắp nơi; Điều này có nghĩa là bất kỳ thay đổi nào (ví dụ: màu phông chữ ứng dụng rộng) trong tương lai sẽ chỉ yêu cầu một thay đổi duy nhất, sau đó là chu kỳ biên dịch và hàng hóa của bạn để đi. Tuy nhiên, nếu các cài đặt này có thể được cấu hình bởi người dùng, thì chúng không thể được mã hóa cứng, nhưng thay vào đó cần được đọc từ nguồn bên ngoài và nơi bạn thực hiện, là vấn đề về thiết kế, độ phức tạp và bảo mật.

Tệp văn bản thuần túy là tốt cho một ứng dụng nhỏ, nơi bảo mật là lỏng lẻo và mọi thứ đều là văn bản thuần túy. Trình chỉnh sửa SublimeText và trình soạn thảo notepad ++ làm điều này cho các thiết lập chủ đề của chúng và nó hoạt động tốt. (Tôi tin rằng đó là văn bản thuần túy, có lẽ họ đã chuyển sang XML ngay bây giờ)

Một tùy chọn tốt hơn là XML, vì nó được cấu trúc, dễ đọc/phân tích/ghi. Rất nhiều dự án sử dụng tùy chọn này. Một điều cần chú ý là các tệp bị hỏng, trong khi đọc/ghi vào chúng, nếu người dùng đóng chương trình hoặc JVM thoát ngẫu nhiên vì bất kỳ lý do gì. Bạn có thể muốn xem xét những thứ như bộ đệm. Và cũng đối phó với FileNotFoundExceptions, nếu tập tin text/xml bị thiếu.

Tùy chọn khác là tệp cơ sở dữ liệu của một số loại, an toàn hơn một chút, bạn có thể thêm mã hóa cấp ứng dụng và bạn có vô số tùy chọn. Các chương trình lớn đã sử dụng một chương trình phụ trợ DB, như MySQL, đã có cơ sở dữ liệu để bàn tay, do đó hãy tạo một bảng mới và lưu trữ cấu hình đó.Các ứng dụng nhỏ có thể xem xét SQLite như một tùy chọn.

0

Không bao giờ gặp khó khăn về mã nếu "có thể" thay đổi hoặc bạn có thể xin lỗi sau đó và khiến người khác phát điên (rất có thể trong các dự án lớn hoặc/và nguồn mở). Nếu cấu hình sẽ không bao giờ thay đổi, nó không phải là một cấu hình nữa mà là một hằng số.

Chỉ sử dụng mã hóa cứng khi thử nghiệm với mã.

Nếu bạn muốn lưu các giá trị đơn giản, bạn có thể sử dụng thuộc tính java.

Hãy xem HERE để biết ví dụ.

chúc may mắn.

2

Vâng, gần như chắc chắn là một ý tưởng tồi để mã hóa chúng; nếu không có gì khác, nó có thể làm cho thử nghiệm (cho dù tự động hoặc bằng tay) rất nhiều khó khăn hơn nó cần phải được. Thật dễ dàng để bao gồm tệp .properties trong bình của bạn với các giá trị mặc định thông thường và việc thay đổi chúng trong tương lai sẽ chỉ yêu cầu ghi đè chúng trong thời gian chạy. Việc tiêm phụ thuộc thường là lựa chọn tốt hơn nếu bạn có sự linh hoạt để sắp xếp nó.

+2

+1, đặc biệt để đặt các giá trị mặc định trong tập tin thuộc tính (hoặc một số loại tệp khác) trong bình. Điều đó đưa chúng ra khỏi mã và vào một tệp cấu hình mà không phải chịu thêm bất kỳ sự phức tạp triển khai nào. Từ đó, đó là một bước nhỏ để lấy tệp cấu hình bên ngoài tùy chọn thay vào đó, trong khi có thể quay trở lại mặc định được giao. Trong trường hợp khẩn cấp, một sysop thậm chí có thể thả một tập tin thuộc tính mới vào bình bằng tay, mà chúng không thể dễ dàng thực hiện với các tệp lớp. –

0

Có một số thuộc tính bạn có thể thay đổi mà không cần phải kiểm tra lại phần mềm. Những thuộc tính này bạn đã thử nghiệm cho một loạt các giá trị, hoặc bạn chắc chắn rằng nó là an toàn để thay đổi với nhiều nhất là khởi động lại. Thuộc tính này có thể được cấu hình.

Có các thuộc tính khác mà bạn không thể giả định sẽ hoạt động mà không cần thử lại phần mềm. Trong trường hợp này, tốt hơn là mã hóa chúng IMHO. Điều này khuyến khích bạn trải qua quá trình phát hành khi bạn thay đổi một giá trị như vậy. Giá trị mà bạn không bao giờ mong đợi để thay đổi là một ứng cử viên tốt cho việc này.