単一のファイルとしてモデルを開発し、後でそのモデルを複数の ファイル (モデル・パーティションと呼ばれる) に分割することができます。 モデルのサイズまたはパッケージ構造が管理できなくなっているときは、 モデルの分割を検討してください。
モデルの分割は、適正に行わなかった場合、チームのコラボレーション および開発を妨げる可能性があるため、実施するのは極端な事情がある場合に限定する必要があります。 モデルの分割を検討する前に、モデルのアーキテクチャーは適当か、また 割り当てられているモデルの所有権は有効かを確かめれば、パーティションをできるだけ減らし、一般的なマージを減らすことができます。
有効なモデル・アーキテクチャーであるかどうかは、ほぼ分解によって決まります。 以下の分解の原則は、 オブジェクト指向の開発、コンポーネント・ベースの設計、 およびサービス指向のアーキテクチャーを推進するものと同じです。
分解したモデルに依存関係がまだ多数含まれている場合は、次の 2 つの選択肢があります。
有効なアーキテクチャーを設定すると、アーキテクチャー・ コンポーネントの所有権を個人または小規模のチームに割り当てることができます。 ひとりの個人のみ、または親密な小規模のチームが、 あるモデルの論理パッケージまたはブランチについて作業しているときは、 モデルを格納している場所が、単一のモデリング・ファイルであるか、 複数のモデリング・ファイルであるかに関係なく、 そのモデルの一般的なマージをできるだけ減らします。
アーキテクチャーの相互依存は論理的であって、物理的ではないため、複数の モデリング・ファイルにモデルを分割化しても、一般的なマージ作業を回避することはできません。 あるモデルを複数のモデリング・ファイルに分割する場合、 要素の相互依存の表現はファイル内参照ではなく、相互ファイル参照になります。
相互ファイル参照の破壊のために起きるマージの競合は解決が困難です。 相互ファイル参照は、ホスト・ファイル・システムのファイルを公開したために、 破壊された可能性のある箇所を表示します。 したがって、Eclipse 環境外でファイルを移動、名前変更、またはそれ以外の変更を 行った場合、Eclipse は相互ファイル参照を追跡できません。
以下の状態では、 モデルを複数のファイルに分割することを検討してください。
一部の構成管理ポリシーでは、複数のチーム・メンバーが 1 つのモデルに 同時に作業する並行開発が可能になっています。 並行開発中は、未調整の変更によって、あるファイル、および そのファイルが表す論理モデルまたはモデルのサブセットが影響を受ける可能性があります。 モデル・ファイルを構成管理システムに保存する前にすべての変更内容を マージする必要があります。 形式的なマージは変更内容が競合していないときに発生するため、 モデルのマージ・ツールは変更内容を自動的にマージします。 一般的なマージは複数のユーザーが競合している内容の変更を行うと発生し、 ユーザーがどの変更内容を受け入れるか決定しなければならなくなります。
モデルを分割するのは、抽象化のレベルが固まった後に限るべきです。モデルの抽象化レベルが安定していると、あまり分割を変更しなくて済みます。 また、共通コンポーネントを確認して最初に安定化する必要があります。 共通コンポーネントへの変更によって、 ほかのパーティションのすべてに影響を与える競合が発生する可能性があるためです。
モデルの初期段階のバージョンでは、多くの場合、システムの最上位のサブシステムを記述しています。 今後反復作業を重ねても残る可能性がある最上位のサブシステムを定義するまで、モデルは分割すべきではありません。最上位のサブシステムを十分に検討して設計が固まった段階で、サブシステムを分割します。これにより、並行した開発が可能となり、モデルを開く速度を向上させることができます。個々のサブシステムのコンテンツが固まれば、 そのサブシステムを分割できます。
データ破壊を防ぐために モデルのパーティションを操作するときは、 同じ改訂レベルにあるすべてのパーティションを含む、 同期のとれたワークスペース内で常時作業を行う必要があります。
例
以下の例は、同期のとれていないワークスペース内で モデルのパーティションを操作した場合に起こる可能性がある問題を示しています。
ある構成管理システムのあるモデルには、 モデル X とモデル Y という 2 つのパーティションがあります。 どちらのモデルもバージョン 20 です。 モデル X には P1 と言う 1 つのパッケージが含まれています。 モデル Y は空です。
2 人のユーザーが以下のワークフローに従事しています。
ユーザー B がワークスペース内の既存のバージョン (モデル X、バージョン 20) を選択した場合、チェックアウトのメッセージが出た操作を再度行う必要があります。
しかし、 ユーザー B が自分の変更内容を新しいモデルのバージョン (モデル X、バージョン 21) を使用して保存すると、ユーザー A が行った変更に上書きすることになります。