Как представлять вызовы внутри одного класса с использованием диаграммы UML-Sequence

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

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

Мне нужно представление, подобное стеке в диаграмме последовательности UML. Возможно ли использование диаграммы последовательности или какая-либо другая диаграмма - лучший способ представления вызовов внутри одного класса? Просьба сообщить.

Ответ 1

Несколько предложений:

  • Вы можете показать последовательные методы на диаграмме последовательности, используя собственные вызовы. См. Рисунок 1 здесь для примера (self calls - это круговые вызовы на одной линии).
  • В качестве альтернативы вы можете рассмотреть Диаграмму деятельности. Возможно, лучше подходит для иллюстрации порядка методов.
  • Восстановите код. Много логики в одном классе обычно плохой запах. Предполагая, что у вас есть область действия, рефакторинг может быть хорошей идеей.

НТН.

Ответ 2

Представление самозапуска на диаграмме последовательности UML (см. шаг 7).

self-call на диаграмме последовательности UML

Если вызываемый метод является (или должен быть) закрытым, то его можно безопасно исключить из диаграммы последовательности как деталь реализации.

Однако я чувствую запах God-Class против шаблона; ваш класс имеет множество обязанностей и должен быть деконструирован. Разбейте класс таким образом, чтобы с помощью делегирования была только единая ответственность. Эти вызовы методов будут хорошей отправной точкой.

Ответ 3

На самом деле можно ссылаться на экземпляр self

Фактически UML spec 2.5b1 на стр. 607, о Lifeline сказано: если имя является ключевым словом self, то Lifeline представляет объект классификатора, который включает в себя взаимодействие, которое владеет Lifeline. Порты корпуса могут отображаться отдельно, даже если включен сам.

См. http://lowcoupling.com/post/47844944042/uml-sequence-diagrams для полного примера