55

Trong các sản phẩm phần mềm lớn và phức tạp, việc quản lý các cài đặt có thể cấu hình trở thành một nỗi đau lớn. Hai cách tiếp cận mà tôi đã gặp phải là:Các mẫu thiết kế nào có thể được áp dụng cho vấn đề cài đặt cấu hình?

  • mỗi thành phần trong hệ thống tải cấu hình của riêng nó từ tệp cấu hình hoặc cài đặt đăng ký.
  • có lớp trình tải cài đặt tải tất cả các cài đặt hệ thống có thể định cấu hình và yêu cầu từng thành phần tải trình cài đặt cho cài đặt của cấu hình.

Các phương pháp này đều cảm thấy sai với tôi.

Có mẫu thiết kế nào có thể được sử dụng để đơn giản hóa sự cố không? Có lẽ cái gì đó sẽ tận dụng kỹ thuật tiêm phụ thuộc.

+4

Tại sao bạn nghĩ tùy chọn 2 là sai? – ChaosPandion

+2

Nó thường được thực hiện như một singleton, mặc dù có những cách khác để thực hiện nó. –

Trả lời

37

Tôi thích tạo giao diện để đặt truy vấn, tải và lưu. Bằng cách sử dụng tiêm phụ thuộc, tôi có thể tiêm vào mỗi thành phần yêu cầu nó.

Điều này cho phép sự linh hoạt về mặt thay thế chiến lược cấu hình và tạo cơ sở chung cho mọi thứ hoạt động. Tôi thích điều này với một trình tải cài đặt "toàn cầu" duy nhất, (tùy chọn 2 của bạn), đặc biệt là vì tôi có thể ghi đè cơ chế cấu hình cho một thành phần nếu tôi hoàn toàn cần làm như vậy.

+0

hello, nó sẽ được tốt đẹp nếu u chia sẻ một số mẫu :) – issamux

17

Tôi hiện đang làm việc trên một hệ thống nơi cấu hình được quản lý bởi một đối tượng đơn lẻ toàn cầu giữ bản đồ các khóa cấu hình cho các giá trị. Nói chung, tôi ước nó không được thực hiện theo cách này vì nó có thể gây tắc nghẽn đồng thời trong hệ thống và nó cẩu thả để kiểm tra đơn vị, v.v.

Tôi nghĩ Reed Copsey có quyền (tôi đã bỏ phiếu) , nhưng tôi chắc chắn sẽ khuyên bạn nên đọc bài viết tuyệt vời Martin Fowler về dependency injection:

http://martinfowler.com/articles/injection.html

Một phụ lục nhẹ quá ... nếu bạn muốn làm bất kỳ kiểm tra đơn vị loại đối tượng giả, dependency injection chắc chắn là cách để đi.

+0

Có vẻ như trang trí phù hợp với nhu cầu của bạn. Bạn có thể tạo một trình trang trí có thể tuần tự hóa để có thể tạo các lớp có thể tuần tự theo cách riêng của chúng. Chiến lược có thể được sử dụng để làm cho tất cả các đối tượng có chiến lược của họ cho serialization. Những đối tượng không cần phải được tuần tự hóa có thể sử dụng chiến lược bỏ qua. Những người chỉ cần serialize trường chiến lược của họ OnlyFields và như vậy. Bạn sẽ linh hoạt với việc thêm những điều mới vào cấu hình của bạn. Chắc chắn như tất cả các phương pháp tiếp cận này có ưu và nhược điểm của nó. –

3

Làm thế nào về điều này. Bạn định nghĩa một giao diện Có thể cấu hình với một cấu hình phương thức đơn (cấu hình). Đối số cấu hình đơn giản là một hashtable liên kết tên của các tham số cấu hình với các giá trị của chúng.

Đối tượng gốc có thể tạo cấu hình có thể bắt đầu bằng bất kỳ cách nào họ muốn (ví dụ: đọc từ tệp cấu hình). Điều này hashtable có thể chứa các tham số cấu hình cho các đối tượng gốc iselft, cộng với bất kỳ tham số mà một trong các thành phần của nó, tiểu thành phần, tiểu tiểu thành phần (vv) có thể sử dụng.

Đối tượng gốc sau đó gọi cấu hình (cấu hình) trên tất cả các thành phần có thể định cấu hình của nó.

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