Как использовать области расширения для циклов в диаграмме активности? - PullRequest
3 голосов
/ 04 апреля 2019

У меня проблемы с созданием правильной диаграммы UML-активности.

Я видел похожие вопросы и возможные ответы: Как представить цикл в диаграмме активности?

Даже с этими ответами у меня возникают сомнения, и мой собственный ответ нене соответствуют определениям UML.

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

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

Предполагается ли автоматически, что Region будет перебирать все элементы до тех пор, пока не останется ни одного элемента, прежде чем он перейдет в ActivityFinal?

Вот предприятиеСкриншот архитектора того, что я сделал: enter image description here

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Прежде всего, ваши Узлы расширения связаны с потоками управления или ваши действия связаны с потоками объектов, что невозможно (слишком плохо, что советник не применяет это правило). Это означает, что вам нужно иметь действие после начального узла, которое предоставляет вам коллекцию. Также вы используете Действия в Диаграмме Деятельности. Вопреки распространенному мнению (и EA), это не допускается. Вы должны использовать действия (возможно, CallBehaviorActions вызывает действия, но это ваше дело).

Я не знаю точно, что вы пытаетесь смоделировать. Однако вот мое предложение для правильного использования регионов расширения: enter image description here Первый узел расширения создает маркер объекта для каждой папки в каталоге. Второй узел расширения создает маркер объекта для каждого файла в папке. Если вам нужен доступ к имени папки, вы можете просто нарисовать поток объектов в области. Затем будет предоставлен отдельный маркер папки для каждого выполнения внутренней области расширения.

Нет необходимости моделировать выходной узел расширения, если он вам не нужен. Просто завершите каждое выполнение с помощью Flow Final Node. После завершения последнего выполнения Регион создаст токен для исходящего потока управления.

1 голос
/ 04 апреля 2019

Исходя из вашего ответа, это просто объект, над которым вы действуете.

enter image description here

Вы можете просто поместить этот объект в глобальный контекст вне вашейрегион расширения.Параметры ввода / вывода просто остаются прежними.Они являются аналогом параметров процедуры.В случае, если вы возитесь с внешним (глобальным) объектом, возвращаемым значением будет некоторая пустая коллекция (и, возможно, некоторая информация, с которой вы имели дело с внешним объектом).

...