良い質問。これは私自身の経験からの考えです。Martin が同意するかどうかはわかりませんが (!)、それでも役立つことを願っています。
要約すると、主な違いは、関係の形式とデザインの選択から生じます。
私は次の便利なことがわかりました:
基本構造: スケッチとして Fowler の UML に大まかにマップし、ホワイトボード上でインタラクティブに作成します。主な目的は、全体の構造を理解することです。非常に非公式。特に、関係に焦点を当てるのは、形式化するのではなく、それらを識別することだけです。したがって、カーディナリティ、削除動作、コンテナ クラスの選択などはありません。
ドメイン モデル。関係の形式化に重点を置いた正確なモデル。具体的には、アソシエーションの名前付け、カーディナリティの定義、および削除動作の確認を行います。カーディナリティが 1 を超える場合、ナビゲート可能性やコンテナー クラスの選択は考慮されません。問題領域を学習するために私が知っている最高のテクニックの 1 つです。
ほとんどの場合、上記の両方を使用します。ドメイン モデルの重要な点は、役割ベースではなく動詞ベースの命名を使用することです。これは、関係が存在する理由を説明するためです (ビジネス ルールが効果的に表面化されます。たとえば、「注文は 1 人の顧客によってのみ行われる必要があります」など)。Simsion & Wittの本に記載されている命名テンプレートを使用します。
ドメイン モデルを実際のコードに変換するには、特にリレーションシップにおいて、やらなければならない作業があります。プログラミング言語はリレーションシップをあまりサポートしていないため、関連付けを参加クラスの属性に変換する必要があります。その時点で、1 を超える多重度のコレクション タイプの選択とともに、ナビゲーション機能が登場します。また、すべての操作を指定する必要がある場所でもあります。個人的には、このタイプの図が特に役立つとは思いません。ドメイン モデルとコードがあれば、必要なものはすべて手に入ります。
実行可能な UML ツールを使用している場合にのみ、「UML をプログラミング言語として」使用します。
それが少しとりとめのない場合は申し訳ありませんが、それが役立つことを願っています...
PS: 動詞に基づく命名のより良い例が必要な場合は、私のブログに投稿があります。それを自己宣伝と見なさないでください。ここで繰り返しても意味がありません。