2017-02-21 2 views
1

저는 UML 상태 다이어그램을 사용하여 프로세스를 모델링하고 있습니다.상태 다이어그램을 사용하여이 프로세스를 모델링하는 방법은 무엇입니까?

function getAccountState(customer) { 

    if (authorizationRequired(customer)) { 
     return State.AUTHORIZATION_REQUIRED 
    } 

    if (updateRequired(customer)) { 
     return State.UPDATE_REQUIRED 
    } 

    return State.DRAFT 
} 

은 내가 가진 가장 가까운이 그림이었다 : State diagram

그러나, 나는 각각의 전환이 두 번 포함되어 있다는 다소 이상한 생각 여기에 현재 상태를 결정하는 일부 의사 코드이다. 순서가 중요하지만 인증 확인이 항상 먼저 이루어져야 함을 의미합니다.

이 프로세스를 어떻게 모델링하나요?

편집 :

이 과정 뒤에 배경이 REST 서비스입니다. 계정은 자원으로 모델링되며 다양한 상태를 거칠 수 있습니다. 리소스가 요청 될 때마다 서비스는 위의 의사 코드에 설명 된 순서대로 검사를 수행하여 일치하는 표현을 생성합니다. 대답에 따라,이 중 하나를 포함 : 계정이 업데이트가 필요한 경우 프로파일을 업데이트 할 권한

  • 에게 링크를 필요로하는 경우

    • 링크가 계정에 권한을 부여 할 수있는 계정이되면 (이 그러나 단지 일어날 수있다 승인되거나 승인 될 필요가 없음)
    • 프로필이 최신 상태 인 경우 계정을 마무리 할 수있는 링크 (클라이언트에서 업데이트하고 업데이트해야했기 때문에 또는 계정에서 업데이트하지 않아도 됨) 1 위)

    위의 코드는 단지 예시입니다. 르. 이 서비스는 "상태"를 저장하는 데이터베이스 필드를 활용할 수도 있습니다.하지만이 패턴은 안티 패턴이 아닙니다. 별도의 필드에 상태를 (중복하여) 저장하는 대신 저장된 데이터에 비즈니스 규칙을 적용하여 현재 상태를 "파생"하는 것이 더 적합합니다. 그것이 의사 코드가 나타내는 것입니다.

  • +0

    코드가 실제로 상태 시스템을 나타내지는 않습니다. auth-needed/upd.-req가 어떻게 필요한지는 분명하지 않습니다. 운영은 전체 시스템에 영향을 미칩니다. 또한 처음부터 두 번을 양도 할 수 없습니다. 그것은 결정되지 않은/임의 경로를 취할 것입니다. –

    +0

    코드는 "활성"상태의 규칙을 나타냅니다. 예 : 계정을 만들 때 메서드가 호출되고 계속하기 전에 계정을 승인해야한다고 반환 할 수 있습니다. 이 작업 (예 : 권한 부여) 후에 메서드가 다시 호출되고 프로필 업데이트가 필요함을 반환 할 수 있습니다. 그렇지 않은 경우 계정은 초안 상태입니다. 이 코드는이 논리를 나타 내기위한 것으로,이 코드는 실제로 일부 시스템에는 존재하지 않습니다. 방금 규칙을 설명하고 싶었습니다. –

    +0

    예, 알고 있습니다. 그러나 작업에서 반환 된 조건 만 반환합니다. 이것은 상태 머신이 아닙니다.조건부 값을 반환하는 단순한 연산인데 실수로 "상태"라는 이름을 붙입니다. –

    답변

    0

    당신의 편집에 따르면, 나는 다음과 같은 접근 방식과 함께 올 것 :

    enter image description here

    당신은 (선택 사항) 인증 및 업데이트를 통해 Draft 상태에 도달 할 것이다. 실패하면 상태 시스템이 재설정됩니다.

    0

    "각 전환이 두 번 포함되는 것이 다소 이상합니다"라는 한 가지 의견을 제안합니다. 한 상태에서 동일한 이벤트에 의해 트리거되는 여러 전환을 가질 수 있지만이 경우 전환은 다른 보호 기능을 가짐을 이해했습니다. . 내가 기억 하듯이 표기법은 evt [guard]입니다. 희망이 도움이됩니다.

    +0

    흥미로운 접근 방법입니다. 문제는 주로 (UML 표기법을 사용하여) 조건을 표현하는 것이 더 나은지 또는 전환에 대한 경비로 표현하는 것이 더 나은지 여부입니다. 무엇을 사용해야하는지에 대한 조언이 있습니까? –

    +0

    이 질문 (http://stackoverflow.com/questions/5724259/state-transition-with-different-guard-condition)에 따르면 경비원을 사용하면 실제로 갈 길입니다. 또한 수용된 응답의 링크 된 예제는 두 개 이상의 주에서 사용되는 선택에 대해 이야기합니다. 부울 선택은 당연히이 조건을 충족하지만 부울 선택을 처리하도록 명시 적으로 설계된 가드가 여기서보다 적합합니다. –

    +0

    방금 ​​경비원을 사용하여 그 모델을 만들려고했습니다. http://imgur.com/hFlOazC 나는 choicepoint 접근 방식으로 갈 것입니다. 이해하기 쉽고 단순하지 않다면 다이어그램으로 무엇인가를 시각화 한 아이디어입니다 :) –

    관련 문제