Диаграмма состояний UML: триггеры кросс-ортогональных областей

Я нахожусь в процессе осмысления диграмм состояния UML, анализируя состояния, которые может иметь один из наших клиентов. Я пытаюсь использовать составное состояние с ортогональными областями, в которых одно состояние по одной причине является триггером по меньшей мере одного изменения состояния по другой ортогональной причине.

Я понимаю, что, возможно, пытаюсь использовать неправильную парадигму для моделирования этого, поэтому не стесняйтесь поправлять меня на этом основании, но для целей этого вопроса есть упрощенное, но немного более подробное объяснение ситуации:

  • "Активное" состояние клиента имеет 3 ортогональных области, я буду называть их R1, R2 и R3
  • R1 имеет состояния "снятие счета отключено" и "снятие включено"
  • R2 имеет "Идентификатор не подтвержден" и "Идентифицирован проверен"
  • R3 имеет "только наличный счет" и "кредитный счет"

Изменение R3 с "только для наличных" на "кредит" может произойти только после того, как R1 находится в состоянии "снятие с учета" и R2 находится в состоянии "ID проверено" - плюс еще один триггер.

При построении диаграммы состояний существует ли действительный способ сделать один переход состояний в одной ортогональной области (по меньшей мере, частично) зависимым от набора состояний в других ортогональных областях? Если нет, какие еще способы я мог бы представить это?

(Между прочим, я думал о моделировании состояний учетных записей отдельно, но обсуждения в домене таковы, что было бы более полезно интегрировать это как часть состояния клиента)

Заранее спасибо за помощь.

1 ответ

Я бы использовал охрану, как это

при условии, что R1 а также R2 являются государственными машинами самостоятельно.

Может быть, есть более формально правильный способ описания охранника. Но я думаю, что читатель может понять идею, стоящую за этим.

Другие вопросы по тегам