나는 값이 대부분 부울 인 객체의 속성을 가지고 있지만 서로 다른 소스에서 왔으며 다른 소스가 서로 무시합니다.서로 충돌하고 우선 순위가 높은 소스에서 오는 속성에 대한 디자인 패턴이 있습니까?
예를 들어, 기능 X는 사용자가 사용할 수있는 경우를 결정하기 위해, 나는 다음과 같은 한 정보 소스 :이 기능에 대한
- 기본 값은 같은
- 사용자 "기능 X는 기본적 당 수 있습니다" 계정 유형이 다음과 같습니다. '기능 X는 계정 유형이'비즈니스 '인 사용자에게만 제공됩니다.
- 국가는 기능 X를 사용할 수 없습니다.
- 사용자 별 오버 라이드는 "기능 X is is 멋지 기 때문에이 사용자가 사용할 수 있습니다. "
다른 기능의 경우 소스 목록, 해당 순서 및 기본 효과가 다릅니다. 예를 들어 기능 Y는 개별 사용자에 대해 무시 될 수 없으며 국가 출처가 우선합니다.
은 어쩌면 내가 따르고 현재 구현, 너무 경계 해요 :
- 각 기능은 클래스 기능의 상수에 의해 식별됩니다.
- 기본값이있는 배열이 있습니다 (기능 X -> 기본값별로 사용할 수 없음).
- 각 계정 유형에 대한 배열이 있습니다 (비즈니스 계정 : 기능 X -> 사용 가능, 기능 Y -> ...)
- 다른 모든 소스에 길고 긴 기능이 있으며
if
- 중첩 - 끝 부분에 무조건적인 사용자 별 재정의가 있습니다 (또는있을 수 있음)
(select available from user_feature where user_id=1 and feature_id=X
).
질문은입니다. 어떻게해야합니까?이 문제에 대한 디자인 패턴이 있습니까? 어쩌면 나는 너무 일반적이고 YAGNI가 대답하려고 노력 중입니까?
내가 해결할 수 상상 무엇 :
- DSL을 "이 나라에서 사용할 수 없습니다"와 "이 계정 유형에 대해 사용 가능한"같은 것들을 표현하는 속성에 소스의 효과를 설명하기 위해
- 은
- 기본이 또 다른 원천이 될 수있는 정의 된 각 속성에 대한 소스의 목록을 주문
수정
아마도 내 문제는 다양한 속성과 소스의 개수입니다. 어쩌면 모든 속성을 계산하기 위해 속성, 데이터 소스, 우선 순위/소스 순서/재정의 정보를 저장하는 효율적인 데이터 구조가 필요합니다.
누군가 내 뜻을 이해하는 경우 명확하게 설명하거나 태그를 지정하십시오. – fungusakafungus
가능한 [개체 인스턴스의 동적 속성?] (http://stackoverflow.com/questions/500540/dynamic-properties-for-object-instances) –
...'내가 무슨 뜻인지 이해하게됩니다. ' 이리. 어떤 종류의 해결 알고리즘이 필요합니다. 관련된 관련 검색어로는 이름 지정 서비스, 디렉토리 서비스, 그래프 데이터베이스, 네임 스페이스 분석, 환경 오버라이드, 특성, 정책 패턴 등이 있습니다. (포함되지 않음 : Wailing, youtube, Katz, TIMTOWTDI_) – sehe