2011-01-14 4 views
2

이슈 트래커와 비슷한 디자인 패턴은 무엇입니까?트래킹/상태를위한 디자인 패턴

다양한 상태 중 하나가 될 수있는 객체가 있습니다 (open, closed, in production).

작업은 현재 상태를 기반으로 수행 할 수 있습니다.

내 초기 모델링은 조금 다음과 같습니다

class Status 
    - next_status (None or Status) 
    - previous_status (None or Status) 
    - actions (set of Actions) 

class Action 
    - name (string) 
    - description (string) 

을 작업을 그룹화하고 상태에 그룹을 할당의 가능성과 함께. 대부분의 권한 모델과 마찬가지로 말할 수 있습니다.

이 패턴이 가장 많이 입력되는 부분을 찾고 있었기 때문에 좀 더 연구 할 수있었습니다. 감사!

답변

3

당신은 finite state machine (FSM)을 대표하고 조합을 생각하고 있지만, 클래스의 디자인은 doubly-linked list처럼 보인다. 상태가 이전 및 다음 상태를 결정할 경우 이는 실행 가능하지만 대부분의 시스템에서 이는 사실이 아닙니다. 귀하의 예에서 "열린"상태를 생각해보십시오. 다음이 "폐쇄"또는 "생산 중"일 수 있습니까?

모두에서 상태가 가능성이있는 경우 클래스 계층 구조에 오브젝트 (동작 교체 아마 나?) 상태의 오브젝트를 변경하고 전환을 추가하는 것을 고려 : 열 "

class Status 
    - transitions (Transition[]) 

class Transition 
    - from (Status) 
    - to (Status) 

여기 상태 전환이 가능하다는 것을 알고 (예 : "는"폐쇄 형 "또는"생산 중 "으로 전환 될 수 있음). 이 방법으로 FSM을 directed graph으로 나타냅니다. 또한, 내 자신의 경험에 따라 기업이 어디서 왔는지 알 수 없으므로 prior_status을 제거하는 것이 중요하지 않습니다. 대신 경로는 감사 로깅/데이터베이스 테이블 캡처 기록을 통해 캡처 할 수 있습니다.

+0

이것은 내가 원하는 것 같습니다. 나는 벌써 전환을 기록하고 있는데, 이것은 나에게 올바른 통찰력을 제공합니다. 감사! –