그러한 상황에서 나는 때때로 여러 개의 층을 가진 "문맥"이라는 용어를 성공적으로 도입 (재사용)했다.
즉, 이러한 종류의 개체를 요청할 수있는 "전역"개체 저장소 인 단일 항목을 의미합니다. 이를 필요로하는 코드에는 상점의 헤더가 포함되며 전역 함수를 사용하여 객체 인스턴스 (이자율 제공 업체 등)를 가져옵니다.
상점은 다음 중 하나 일 수 있습니다.
- 엄격하게 유형이 지정됨 : 모든 게재 유형에 대한 헤더를 포함하므로 InterestRate getCurrentInterestRate ()와 같이 유형이 지정된 접근자를 만들 수 있습니다.
- 또는 일반 : Object getObject (enum obType); 새로운 종류 (obtypeCurrentInterestRate)로 obType 열거 형 만 확장하십시오.
시스템이 클수록 잘못된 열거를 사용할 위험이 적기 때문에 후자의 솔루션이 더 유용합니다. 반면에 앞으로 형식 선언을 허용하는 언어를 사용하면 저장소에 모든 헤더를 포함하지 않고 형식화 된 접근자를 사용할 수 있다고 생각합니다.
한 가지 더 참고 : GUI 및 인쇄물, 전역 및 세션 수준 로그 등의 다른 언어 값과 같이 다른 용도로 동일한 객체 유형의 인스턴스가 여러 개있을 수 있으므로 열거 형 / 접근 자 이름이 실제 유형을 반영해서는 안됩니다 요청 된 인스턴스 (CurrentInterestRate)의 역할입니다.
상점 구현에서 컨텍스트 레벨 및 컨텍스트 인스턴스 콜렉션을 관리해야합니다. 간단한 예는 웹 서비스로, 전역 컨텍스트 (해당 개체에 대한 모든 요청에 대한 하나의 인스턴스-서버 팜이있을 때 문제가 있음)와 각 웹 세션에 대한 컨텍스트가 있습니다. 여러 개의 병렬 세션 등을 가질 수있는 각 사용자에 대한 컨텍스트를 가질 수도 있습니다. 여러 서버의 경우 이러한 종류의 분산 캐시를 사용해야합니다.
요청이 들어 오면 요청 된 객체의 컨텍스트 수준을 결정하고 해당 컨텍스트를 호출에 가져옵니다. 객체가 있으면 다시 보냅니다. 그렇지 않은 경우 해당 컨텍스트 레벨에서 작성하여 저장 한 후 리턴합니다. 물론 작성 섹션을 동기화하고이를 분산 캐시에 공개하십시오. 클래스 이름 (Java, Objective C 등)으로 객체 인스턴스를 생성 할 수있는 언어를 사용하면 플러그인과 유사하게 구성 할 수 있지만 팩토리 기능이있는 플러그 가능 라이브러리를 사용하여 C에서 수행 할 수 있습니다.
참고 사항 : 호출자는 자신의 컨텍스트와 요청 된 객체의 컨텍스트 수준에 대해 너무 많이 알지 않아야합니다. 이유 : 1 : 이러한 매개 변수를 사용하여 실수 (또는 "영리한 트릭")를하기 쉽습니다. 2 : 요청 된 컨텍스트 레벨이 나중에 변경 될 수 있습니다. 나는 주로 컨텍스트 정보를 스레드에 연결하므로 객체 저장소에는 요청의 추가 매개 변수가없는 정보가 있습니다.
반면에 요청에는 인스턴스에 대한 힌트가 포함될 수 있습니다 (예 : 특정 날짜에 대한 이자율 확보). 동일한 "전역"액세스 여야하지만 날짜에 따라 여러 인스턴스가 있으며 (및 속도 변경간에 동일한 인스턴스로 다른 날짜 값을 가져옴) "힌트"개체를 요청에 추가하는 것이 좋습니다. 상점이 아닌 인스턴스 팩토리; 상점에서 사용하는 팩토리에 대한 keyForHint. 나중에 언급했듯이이 기능들을 나중에 추가 할 수 있습니다.
귀하의 경우 이것은 일종의 과잉입니다 (전역 수준에서 하나의 객체 만 제공됨). 현재 매우 작고 간단한 추가 코드의 경우 더 복잡한 요구 사항에 대한 메커니즘을 얻습니다.
또 다른 좋은 소식 : Java를 사용하는 경우 봄에 너무 많이 생각하지 않고이 서비스를 얻는다면 자세한 내용을 설명하고 싶었습니다.