0

내 파이프 라인에 책임 설계 패턴 체인을 사용하고 있습니다. 내가 발견 한 한 가지 문제점은 체인을 추가 할 때 구성 객체가 커지고 커진다는 것입니다. 본질적으로, 내 config 객체는 대규모 싱글 톤이되고있다. 이 상황을 처리 할 효과적인 방법이 있습니까?커다란 구성의 책임 체인

세부 사항 :

나의 현재 설정된 최대

handler.next = handler2 
handler2.next = handler3 
... 

내가 그것에 설정 객체를 전달하여 체인을 사용합니다.

handler.HandleRequest(config) 

config 개체에는 처리기에 필요한 모든 구성 정보가 있으므로 더 많은 체인을 추가 할 때 점점 커집니다.

가능한 해결 방법 :

이 게시물에 최선의 대답은 의존성 주입을 사용하는 것입니다.

Which design patterns can be applied to the configuration settings problem?

그러나, 나는 실질적으로 디자인을 변경하지 않고 책임 디자인의 체인에 의존성 주입을 사용하는 방법을 모르겠습니다.

누군가가이 문제에 대해 도움을 줄 수 있습니까? 감사!

+0

체인이 구성 객체를 처리하는지 (무엇을하기 위해?) 또는 구성 객체에서 구성을 추출합니까? –

+0

체인은 config 객체에서 구성을 추출합니다. 예를 들어 데이터 파일이 각 체인 등에 대해 어디에 있는지 등이 있습니다. config 객체는 제공된 구성이 올바른지 여부를 확인합니다. – hwasungmars

+0

또한 Decorator 패턴을 살펴보십시오. 연쇄 책임 (Chain of Responsibility)보다 적용이 더 쉽습니다 (특히 교차 횡단 문제를 추가 할 때 유용합니다). – Steven

답변

0

나는 당신이 정말로 함께 속하지 않는 일들을 함께하려한다고 생각합니다.

응용 프로그램의 다른 부분에 대한 설정/구성 값을 추출해야하는 이유가 무엇인지, 한 곳에서 모두 읽으려고합니까?

나는 일종의 설정이 필요한 각 구성 요소에 대해 작은 "설정 개체"를 선호합니다. 일반적으로 모든 하드 코딩 된 기본값을 포함하는 객체로 시작하여 필요한 경우 기본 설정에서 파생됩니다. 파생 된 객체는 임의의 소스에서 읽을 수 있습니다 (대부분 app.config 파일이지만 데이터베이스와 웹 서비스도 사용했습니다).

자세한 내용은 blog post that describes settings objects입니다.

+0

모든 구성을 보유하는 구성 개체가있는 이유는 책임 체인을 실행하기 때문에 각 처리기는 다음 처리기 만 알고 전체 구성을 전달할 수 있기 때문입니다. 의존성 주입을 원할 경우 책임의 사슬이 어떻게 설정되어 있는지를 실질적으로 수정해야한다는 것을 의미하기 때문에 의존성 주입을하고 싶다면 그렇게하기가 어렵습니다. 현재로서는 다음 처리기에 대한 포인터 만 반환합니다. 이 문제를 해결하는 좋은 방법이 있습니까? – hwasungmars

+0

@ hwasungmars 나는 아직도 그것을 얻지 못한다. 큰 구성 객체가 있습니다 (이 객체는 어디에서 왔으며, 어떤 객체가 백업 저장소입니까? file? 데이터베이스입니까?). 이 객체를 핸들러의 파이프 라인에 던집니다. 각 처리기는 해당 구성 개체 내에서 정보 스 니펫을 찾고 그 정보로 무엇을합니까?로컬에 저장 하시겠습니까? 그 정보에서 새로운 객체를 만드시겠습니까? –