2011-09-08 3 views
2

나는 값이 대부분 부울 인 객체의 속성을 가지고 있지만 서로 다른 소스에서 왔으며 다른 소스가 서로 무시합니다.서로 충돌하고 우선 순위가 높은 소스에서 오는 속성에 대한 디자인 패턴이 있습니까?

예를 들어, 기능 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을 "이 나라에서 사용할 수 없습니다"와
  • "이 계정 유형에 대해 사용 가능한"같은 것들을 표현하는 속성에 소스의 효과를 설명하기 위해
    • 기본이 또 다른 원천이 될 수있는 정의 된 각 속성에 대한 소스의 목록을 주문

수정

아마도 내 문제는 다양한 속성과 소스의 개수입니다. 어쩌면 모든 속성을 계산하기 위해 속성, 데이터 소스, 우선 순위/소스 순서/재정의 정보를 저장하는 효율적인 데이터 구조가 필요합니다.

+0

누군가 내 뜻을 이해하는 경우 명확하게 설명하거나 태그를 지정하십시오. – fungusakafungus

+1

가능한 [개체 인스턴스의 동적 속성?] (http://stackoverflow.com/questions/500540/dynamic-properties-for-object-instances) –

+0

...'내가 무슨 뜻인지 이해하게됩니다. ' 이리. 어떤 종류의 해결 알고리즘이 필요합니다. 관련된 관련 검색어로는 이름 지정 서비스, 디렉토리 서비스, 그래프 데이터베이스, 네임 스페이스 분석, 환경 오버라이드, 특성, 정책 패턴 등이 있습니다. (포함되지 않음 : Wailing, youtube, Katz, TIMTOWTDI_) – sehe

답변

3

"중요성, 허용"

먼저 각 소스에 중요도를 지정하십시오. 기본값은 항상 덮어 써야하기 때문에 중요합니다.

이제 권한을 결정할 때 가장 중요한 소스로 시작하여 무엇을 말하고 있는지 확인하십시오. 행동이 허용되는지 여부를 알려주는 소스를 찾을 때까지 계속 사용하십시오.

일부 소스는 똑같이 중요 할 수 있습니다. 이 경우, 가장 적합한 설정을 사용하십시오. 똑같은 중요성을 지닌 두 가지 출처가 다른 경우, 한 명은 할 수 있고 다른 한 명은 할 수 없다고 말하면, 그렇게 할 수 있습니다. (분명히 이것은 더 이상 중요한 소식통이 당신이 할 수 있거나 할 수 없다고 말한 것으로 가정합니다. 그렇지 않으면 당신이 거기에서 멈추었을 것입니다.)

이것이 알고리즘만큼이나 패턴인지는 알 수 없습니다.

+0

출처의 중요성은 부동산의 성격에 달려 있으며, 약 200 가지가 있습니다. 비록, 나는 속성의 중요성을 속성 설명에 포함시킬 수 있습니다 ... 그것에 대해 생각 해봐야합니다. – fungusakafungus

1

복잡한 시스템을 효율적으로 처리하려면 Specification Pattern을 참조하십시오.

규칙에 DSL을 정의하는 아이디어는 DSL에 의해 작성된 구조가 패턴에 설명 된대로 복합 사양으로되어있어 좋은 규칙 일 수 있습니다.

관련 문제