2012-09-06 37 views
6

Câu hỏi là mũ cũ - thiết kế phù hợp để hỗ trợ tệp cấu hình hoặc cấu hình hệ thống trên hệ thống của chúng tôi là gì? Tôi đã xác định được các yêu cầu sau:Mẫu thiết kế cấu hình trên hệ thống Java

  • nên có thể tải lại hoạt động và có những thay đổi nhặt ngay lập tức không có redeploying
  • Đối với các ứng dụng phần mềm mà dựa vào nhau, ví dụ, SQL hoặc chứng memcached, nên có thể giới thiệu sự thay đổi ở một nơi biệt lập và triển khai trong một lần mua sắm, ngay cả khi ứng dụng được trên máy riêng biệt tại các địa điểm riêng biệt
  • Nhiều quá trình/máy chạy cùng một ứng dụng hỗ trợ

và các bộ phận của thiết kế tôi này tôi là truggling với:

  • Mỗi lớp học chính có tham số "Config" của riêng mình làm thông số đầu vào cho hàm tạo không? Nên có một nhà máy chịu trách nhiệm cho instantiating đối với các cấu hình bên phải? Hoặc mỗi lớp chỉ cần đọc từ cấu hình riêng của nó và tải lại phần nào tự động?
  • Nếu lớp B có nguồn gốc từ lớp A hoặc soạn thảo xung quanh nó, sẽ có ý nghĩa đối với tệp Config được kế thừa không?
  • Giả sử lớp A được xây dựng bằng M1 và M2 (M cho "chính") và M1 có trách nhiệm khởi tạo tài nguyên. Giả sử tài nguyên dựa trên thông tin đăng nhập MySQL mà tôi mong đợi là phổ biến giữa M1 và M2, có cách nào để tránh sự cân bằng quyền sở hữu phá vỡ và đặt trong cấu hình của A. v trùng lặp tài nguyên trên cấu hình M1 và M2 không?

Đây là những vấn đề thiết kế mà tôi đang xử lý ngay bây giờ và không thực sự biết các mẫu thiết kế hoặc khung làm việc ở đây. Tôi đang ở Java nên mọi thư viện giải quyết vấn đề này đều rất được hoan nghênh.

Trả lời

7

Bạn có thể muốn xem Apache Commons Config, cung cấp nhiều tính năng. Bạn có thể chỉ định nhiều nguồn cấu hình và sắp xếp chúng thành một hệ thống phân cấp. Một tính năng quan tâm đặc biệt là cung cấp cho Configuration Events, cho phép các thành phần của bạn đăng ký sự quan tâm của họ đối với các thay đổi cấu hình.

Mục tiêu thay đổi cấu hình trên máy bay là quyến rũ, nhưng yêu cầu một số suy nghĩ xung quanh thiết kế. Bạn cần phải quản lý những thay đổi đó một cách cẩn thận (ví dụ: điều gì xảy ra nếu bạn thu nhỏ kích thước hàng đợi - bạn có vứt bỏ các phần tử hiện có trên hàng đợi không?)

0

Nên mỗi lớp chính có lớp "Config" của riêng nó làm tham số đầu vào constructor?

Không, âm thanh đó giống như một thiết kế khủng khiếp sẽ không cần thiết bao trùm quá nhiều mã. Tôi sẽ khuyên bạn nên thực hiện một lớp cấu hình toàn cầu như là một singleton. Singleton có nghĩa là chỉ có một đối tượng cấu hình, đó là một biến tĩnh riêng của lớp cấu hình của bạn và có thể được mua lại với phương thức getInstance() tĩnh công khai bất cứ khi nào nó cần.

Đối tượng cấu hình này sẽ lưu trữ tất cả thông số cấu hình dưới dạng cặp khóa/giá trị.

+4

Tôi muốn tiêm một lớp, thay vì chỉ định nó như là một singleton. Nó sẽ làm cho thử nghiệm một * nhiều * dễ dàng hơn –

+1

toàn cầu trên 4 ứng dụng cho đến nay và 20 thư viện nội bộ? – djechlin

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