2012-09-06 11 views
6

Pytanie jest stare - jaki jest właściwy projekt do obsługi konfiguracji pliku konfiguracyjnego systemu w naszym systemie? Mam określiła następujące wymagania:Wzorcowy wzór konfiguracji w całym systemie Java

  • powinien być w stanie przeładować na żywo i mają zmiany odebrał natychmiast bez przesunięcia
  • Dla aplikacji, które opierają się na tym samym, na przykład SQL lub memcached mandatów, powinny być możliwość wprowadzenia zmian w odosobnionym miejscu i wdrożyć za jednym zamachem, nawet jeśli aplikacje są na oddzielnych maszynach w różnych miejscach
  • wielu procesach/komputerami pracującymi pod sam wniosek obsługiwane

a częściami tego projektu i jestem s truggling z:

  • Czy każda główna klasa powinna przyjmować własną klasę "Config" jako parametr wejściowy do konstruktora? Czy istnieje fabryka odpowiedzialna za tworzenie instancji w odniesieniu do właściwej konfiguracji? A może każda klasa po prostu czyta z własnej konfiguracji i ładuje się nieco automatycznie?
  • Jeśli klasa B wywodzi się z klasy A lub zawiera kompozycje wokół niej, czy ma sens dziedziczenie pliku konfiguracyjnego?
  • Powiedz, że klasa A jest konstruowana przez M1 i M2 (M dla "głównego"), a M1 odpowiada za utworzenie instancji zasobu. Powiedzmy, że zasób opiera się na poświadczeniach MySQL, które spodziewam się być wspólne dla M1 i M2, czy istnieje sposób na uniknięcie kompromisu w kwestii złamania prawa własności i wstawienia konfiguracji A do v. Duplikowanie zasobu przez konfigurację M1 i M2?

Są to problemy z projektowaniem, z którymi mam do czynienia teraz i nie znam naprawdę wzorców projektowych i ram, które tutaj działają. Jestem w Javie, więc wszelkie biblioteki, które to rozwiązują, są bardzo mile widziane.

Odpowiedz

7

Może chcesz wypróbować Apache Commons Config, która zapewnia szeroki zakres funkcji. Można określić wiele źródeł konfiguracji i ułożyć je w hierarchii. Jedną z cech szczególnego zainteresowania jest przepis na Configuration Events, dzięki czemu twoje komponenty mogą rejestrować swoje zainteresowanie zmianami konfiguracji.

Celem zmiany konfiguracji w locie jest uwodzicielski, ale wymaga on rozmyślań wokół projektu. Musisz ostrożnie zarządzać tymi zmianami (np. Co się stanie, jeśli zmniejszysz rozmiary kolejek - czy wyrzucisz istniejące elementy w kolejce?)

0

Jeśli każda główna klasa ma własną klasę "Config" jako parametr wejściowy do konstruktor?

Nie, to brzmi jak okropny projekt, który niepotrzebnie nadmiernie skomplikuje dużo kodu. Polecam zaimplementować globalną klasę konfiguracji jako singleton. Singleton oznacza, że ​​istnieje tylko jeden obiekt konfiguracyjny, który jest prywatną zmienną statyczną klasy Configuration i można ją uzyskać za pomocą publicznej statycznej metody getInstance(), gdy jest potrzebna.

Ten obiekt konfiguracyjny powinien przechowywać wszystkie parametry konfiguracyjne jako pary klucz/wartość.

+4

Wolałbym wstrzyknąć klasę, niż określić ją jako pojedynczą. Czy to sprawi, że testowanie będzie o wiele łatwiejsze? –

+1

globalnie dla 4 aplikacji i 20 wewnętrznych bibliotek? – djechlin

Powiązane problemy