Возможность слияния и расщепления моделей обеспечивает коллективную работу над проектом. Так, руководитель проекта может создать декомпозицию верхнего уровня и дать задание аналитикам продолжить декомпозицию каждой ветви дерева в виде отдельных моделей. После окончания работы над отдельными ветвями все подмодели могут быть слиты в единую модель. С другой стороны, отдельная ветвь модели может быть отщеплена для использования в качестве независимой модели, для доработки или архивирования.
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. Диалог опций разделения
После подтверждения разделения:
- в основной модели действие станет недекомпозированным (признак — диагональная черта в левом верхнем углу);
- будет создана стрелка вызова, причем ее имя будет совпадать с именем новой модели;
- будет создана новая модель, причем имя контекстного действия будет совпадать с именем действия, от которого была отделена декомпозиция;
- все дочерние диаграммы функционального блока перенесены в новую модель;
- изменения будут отражены в дереве модели.
После создания новой модели можно использовать диалог ввода свойств модели для определения свойств созданной модели.