Как представлять вызовы внутри одного класса с использованием диаграммы 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 для полного примера