17.6. Слияние и расщепление моделей

Возможность слияния и расщепления моделей обеспечивает коллективную работу над проектом. Так, руководитель проекта может создать декомпозицию верхнего уровня и дать задание аналитикам продолжить декомпозицию каждой ветви дерева в виде отдельных моделей. После окончания работы над отдельными ветвями все подмодели могут быть слиты в единую модель. С другой стороны, отдельная ветвь модели может быть отщеплена для использования в качестве независимой модели, для доработки или архивирования.

BPwin использует для слияния и разветвления моделей стрелки вызова — выходящие из нижней грани функционального блока.

Для слияния необходимо выполнить следующие условия:

1) Обе сливаемые модели должны быть открыты в BPwin.

2) Имя импортируемой модели, которую присоединяют к основной модели, должно совпадать с именем стрелки вызова действия в основной модели.

3) Стрелка вызова должна исходить из недекомпозируемого действия (функциональный блок должен иметь диагональную черту в левом верхнем углу) (рис. 17.19).

4) Имена контекстного действия подсоединяемой модели и действия на основной модели, к которой подсоединяют модель, должны совпадать.

6) Импортируемая модель должна иметь, по крайней мере, одну диаграмму декомпозиции.

Рис. 17.19. Пример стрелки вызова в основной модели

Для слияния моделей нужно:

- щелкнуть правой кнопкой мышки по действию со стрелкой вызова в основной модели;

- в контекстном меню выбрать пункт Merge Model;

- в появившемся диалоге Continue with merge следует указать опции слияния моделей (рис. 17.20).

Рис.17.20. Диалог слияния моделей

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

Опции диалога, определяющие правила объединения словарей:

- Cut / Paste entire dictionaries — вставить/объединить словари объектов;

- Overwrite existing fields — при слиянии большим приоритетом будут обладать имена из импортируемой модели, они затрут имена из основной модели;

- Rename matching arrows — при слиянии в случае совпадения имен стрелок из импортируемой модели с именами в основной модели совпадающие имена будут переименованы — в начале имени будет поставлена "тильда" (например, если будет два имени "Пользователь" то после слияния останутся  "Пользователь" и "~Пользователь");

- Rename matching data stores — аналогично для имен хранилищ данных;

- Rename matching externals — аналогично для внешних сущностей.

После подтверждения слияния:

- импортируемая модель подсоединя­ется к основной модели;

- стрелка вызова исчезает;

- действие, от которого отходила стрелка вызова, становится декомпозируемым — к нему подсоединяется диаграмма декомпозиции первого уровня импортируемой модели;

- стрелки, касающиеся действия на диаграмме основной модели, автоматически не мигрируют в декомпозицию, а отображаются как неразрешенные. Их следует туннелировать вручную (см. подраздел 17.2.4);

- дерево модели обновляется для отражения изменений в основной модели (рис. 17.21).

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

Рис. 17.21. Вид моделей в Model Explorer после слияния (выделены модель-источник и присоединенная ветвь модели-цели)

Разделение моделей производится аналогично.

Для отщепления вет­ви от модели следует:

- щелкнуть правой кнопкой мышки по декомпозированному действию (функциональный блок не должен иметь диагональной черты в левом верхнем углу);

- выбрать в контекстном меню пункт Split Model;

- в появившемся диалоге Split Options (рис. 17.22) следует указать имя создаваемой модели. Если указать имя, соответствующее имени функционального блока, то впоследствии эти модели можно будет объединить;

- установить флажок Copy entire dictionaries, чтобы скопировать словари объектов в отделяемую часть модели.

Рис. 17.22. Диалог опций разделения

После подтверждения разделения:

- в основной модели действие станет недекомпозированным (признак — диагональная черта в левом верхнем углу);

- будет создана стрелка вызова, причем ее имя будет совпадать с именем новой модели;

- будет создана новая модель, причем имя контекстного действия будет совпадать с именем действия, от которого была отделена декомпозиция;

- все дочерние диаграммы функционального блока перенесены в новую модель;

- изменения будут отражены в дереве модели.

После создания новой модели можно использовать диалог ввода свойств модели для определения свойств созданной модели.