2009-12-11 4 views
1

프로그램을 재부팅하는 것보다 즉시 적용되도록 설정을 변경하고 싶습니다. 어떤 디자인 패턴이 적합합니까? 설정이 개체의 수가 큰 경우,이 개체 및 설정프로그램 설정 디자인 패턴

사이에 불필요한 종속성을 만들 것입니다, 업데이트해야 할 개체의 속성을 업데이트하는 변경하면
  1. 는 중심 설정 클래스가
  2. 관찰자 패턴은 어떻습니까?하지만이 패턴도 적당하지 않습니다. 그렇다면 개체에 이벤트 처리기를 추가해야하지만 이는 개체의 책임이 아닌 것 같습니다.

솔루션은 무엇인가?

답변

1
  1. 은 좋지 않습니다. 설정 개체가 이러한 모든 개체에 대해 알 필요가 없습니다. 다른 방법은 확실합니다.

  2. -> 왜이 패턴이 적합하지 않습니까?

0

관찰자 패턴은 원하는대로 들립니다.

는 "SettingListener"우리는 우리의 프로젝트 중 하나 한번 비슷한 요청을했다

0

의 맥락에서이를 고려한다.

설정이 포함 된 싱글 톤 클래스를 사용했습니다. 모든 객체는이 객체에 대해 알고 있었으며 필요할 때마다 설정을 풀링했습니다.

이 싱글 톤에는 isValid 속성이 있습니다. Singleton의 getInstance 메소드를 사용하여 구성을 얻었습니다. isValid가 false 일 때 getInstance는 구성을 반환하기 전에 인스턴스에 구성을 다시로드했습니다.

기본적으로 싱글 톤이 사용하고 있던 설정 파일을 변경 한 다음 싱글 톤을 무효화하여 싱글 톤을 알리면 설정을 다시로드합니다.

+0

소리가 해결책 1 인 경우 불필요한 종속성이 도입됩니다. 사물을 재사용하기가 어렵다. – Benny

+0

그래,하지만 개체를 ​​업데이트하지는 마라. 개체는 설정이 변경 되더라도 상관하지 않습니다. 그들은 누군가에게서 설정을 얻습니다. 그리고 누군가가 그것들에 대한 책임이 있습니다. 설정이 변경되면 모든 객체가 통지하지 않습니다. –

0

변경되는 내용에 따라 응용 프로그램을 다시 시작하지 못하도록 처리하는 몇 가지 방법이 있습니다.

모든 설정을 싱글 톤으로 설정 한 경우 설정 파일에서 다시로드하라는 메시지를 표시 할 수 있으며 정적 값이 여기에 있으므로 응용 프로그램이 즉시 새 값을 사용하기 시작합니다.

더 중요한 내용을 변경하는 경우 컨트롤러가 들어가서 필요한 변경을 수행 할 수 있도록 응용 프로그램을 설계해야 할 수 있습니다. 그러나 사용자가 필요한 경우 다시 시작해야 할 수도 있습니다. 하지 않지만 응용 프로그램에 다시 초기화하도록 지시합니다.

0

# 2 변형 : 특정 기능을 설정으로 표시하는 방법을 정의하십시오. 예를 들어, 다음

class Screen { 
    ... 
    [Setting("screen.blink")] 
    public boolean Blink { ... set { ... } } 
} 

아이디어는 그 사용자가 screen.blink 설정을 전환 할 때, 설정 코드가 할 자동으로됩니다, 말, Screen.Instance.Blink = true (또는 false). 그것은 관찰자 패턴과 같은 것입니다, 그러나 그것은 느슨하게 저에게 연결되어 있습니다.

반면에 설정 코드는 올바른 개체를 손에 넣는 방법을 알아야합니다. 위의 장난감 예제에서 나는 Screen.Instance을 할 수 있다고 가정합니다. 그것은 다소 단순합니다. 그것은 모두 당신의 프로젝트에 달려 있습니다. 자신에게 맞는 구성 가능한 개체를 찾기위한 규칙을 찾아야합니다.

0

부분적으로 dpb에 동의합니다. 싱글 톤을 사용하면 "캐시 된"설정에 대한 액세스를 중앙 집중식으로 관리 할 수 ​​있습니다. 그러나 이것은 수동 액세스입니다. 설정이 변경되면 Singleton SettingClass를 사용하는 클래스는 변경 사항을 통보받지 않습니다.

알림 메커니즘을 얻으려면 게시자의 구독자 패턴을 소개해야합니다.

당신이 관찰자의 책임이 아니라고 주장하기 때문에 관찰자에게 이벤트 처리기를 도입하는 데 문제가 있다는 것을 알고 있습니다. 나는 그것에 동의한다.

예를 들어 패시브 비즈니스 엔터티가있는 경우 이벤트 처리기 또는 특성으로이를 오염시키지 않으려 고합니다. 어쩌면 관찰자와 방문자 패턴을 조합하여 사용할 수 있으므로 통보를 위해 클래스에 침해 행위가 필요하지 않습니다.

+0

나는 당신에게 해결책을 시도 할 것이다. – Benny