Những mẫu thiết kế nào có thể được áp dụng cho vấn đề cài đặt cấu hình?


82

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 vấn đề lớn. Hai cách tiếp cận mà tôi đã thấy để giải quyết vấn đề là:

  • để mỗi thành phần trong hệ thống tải cấu hình riêng từ các 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 truy vấn trình tải cài đặt về cài đặt của nó.

Cả hai cách tiếp cận này đều cảm thấy sai đối với tôi.

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


4
Tại sao bạn cho rằng phương án 2 là sai?
ChaosPandion

2
Nó thường được triển khai như một singleton, mặc dù có những cách khác để triển khai nó.
Daniel Bingham

Câu trả lời:


47

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

Điều này cho phép sự linh hoạt trong việc 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 hơn một "trình tải cài đặt" chung, 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 duy nhất nếu tôi thực sự cần làm như vậy.


7
xin chào, sẽ rất tuyệt nếu bạn chia sẻ một số mẫu :)
Issamux.

20

Tôi hiện đang làm việc trên một hệ thống mà cấu hình được quản lý bởi một đối tượng singleton toàn cầu giữ một 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 ra tắc nghẽn đồng thời trong hệ thống và nó cẩu thả cho việc kiểm tra đơn vị, v.v.

Tôi nghĩ Reed Copsey có quyền về điều đó (tôi đã bầu anh ấy), nhưng tôi chắc chắn khuyên bạn nên đọc bài báo tuyệt vời của Martin Fowler về tiêm phụ thuộc:

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

Cũng có một chút bổ sung ... nếu bạn muốn thực hiện bất kỳ thử nghiệm đơn vị loại đối tượng giả nào, thì việc tiêm phụ thuộc chắc chắn là cách để đi.


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ể làm cho các lớp có thể tuần tự hóa 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 tuần tự. 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 tuần tự hóa chiến lược OnlyFields của họ, v.v. Bạn ll be flexible with adding new things to your config. Sure as all approaches this have itlà ưu và nhược điểm.
Yaroslav Yakovlev

4

Còn cái này thì sao. Bạn xác định một giao diện Có thể cấu hình bằng một phương thức cấu hình (cấu hình). Đối số cấu hình chỉ đơn giản là một bảng băm 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.

Các đối tượng gốc có thể tạo một bảng băm cấu hình theo bất kỳ cách nào họ muốn (ví dụ: đọc nó từ một tệp cấu hình). Bảng băm này có thể chứa các tham số cấu hình cho iselft đối tượng gốc, cộng với bất kỳ tham số nào mà một trong các thành phần, thành phần con, thành phần phụ (v.v.) của nó 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ể cấu hình của nó.


0

Bạn có thể tạo nhiều triển khai một giao diện xác định trình tải cấu hình. Về cơ bản, mô hình chiến lược trong đó bạn có thể xác định một giao diện cơ bản là configLoader và sau đó triển khai các triển khai khác như FileSystemLoader, ClasspathLoader, EnvVariablesLoader, v.v. Chi tiết tại liên kết này

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.