web-dev-qa-db-ja.com

クラス図をコードに変換する方法は?

設計段階で、私は通常、次のようなクラス図を思い付きます

Sample from Lucidchart

ただし、コーディング段階では、LibrarianissueStatus()またはのようなクラスは作成しませんsearchBook()メソッド。

100%の時間、クラスLibrarianは、getterメソッドとsetterメソッドのみを含む単純な古いオブジェクトであり、issueStatus()またはsearchBook()機能は、それ自体のクラスに実装されます(おそらくクラスIssueStatusActionHandlerまたはクラスSearchBookActionHandler、ユーザーのアクション(ボタンのクリックなど)によってトリガーされます

これは、設計段階でソフトウェアアーキテクチャを含める必要があることを意味しますか、それともコーディングと並行してクラス図のドキュメントを改訂する必要がありますか?

3
Short answer

これは、設計で何を達成するかという目標に大きく依存します。

どうやら、クラス図をコードに直接変換するコードジェネレーターを対象としていません。したがって、図はそれだけです。最初に、そこから得られる実際の価値と、なぜ努力しているのかを再考する必要があります。対照的に、同僚と一緒にホワイトボードに図を書き、あなたがすべて満足したら、写真を撮ります。大きな違いは何ですか?

質問については、設計段階でアーキテクチャを含める必要がありますか?アーキテクチャの全体のポイントは、設計上の考慮事項に適合するフレームワークになることです。したがって、明らかに、それを考慮に入れる必要があります。

コード中にダイアグラムを修正する必要がありますか?これは、なぜに依存するかによって、そのダイアグラムが異なります。コードを記述したい場合は、明らかにそれを修正する必要があります。必要なのは、「見た目、これは3年前に私たちが想定した方法です。ただし、コード内にこれに近いものは何もありません」ということを人々に伝えることができる場合は、自由に無視してください。

ただし、最新のUML図が必要な場合は、コードを生成できるように(単純な描画ではなく)実際のモデリングに近づくことを強くお勧めします。コード。

最後に、「100%の時間」でコードを記述する方法についての注意:これは実際の質問とは関係ありませんが、ビジネスロジック(ステータスの発行など)をアクションハンドラーに書き込むという考えを再考することをお勧めします。これは多くの優れた設計原則に違反しています。読みたい場合は、Eric Evansの DDD book を参照して、そのようなビジネスロジックがどのように提供されるかを理解してください。

4
Frank

設計段階中...しかし、コーディング段階中....

最初に、ここで混乱に対処しましょう。コードの記述は設計です。つまり、あなたがしているのは「デザイン」ではなく「コード」ではなく、すべてデザインです。

UMLが有用かどうかは疑問ですが、可能な解決策を視覚化するためにUMLを使用したい人もいます。 「ボブおじさん」が「アジャイルソフトウェア開発:原則、パターン、および実践」の本に書いているように

そのため、はい、図が不適切な場合があります。彼らはいつ不適切ですか?それらを検証するためのコードなしでそれらを作成し、それらに従うことを意図している場合。アイデアを探求するために図を描くことには何の問題もありません。

TDDと反復開発を使用する優れた慣行に従っている場合、作成したUML図面とコードが異なることがほぼ保証されます。追加のボーナスとして、イベントハンドラーなどでビジネスロジックが発生する可能性が低くなります。このように区別が不十分で密結合のコードがTDDアプローチを使用して開発されることはほとんどありません。

2つが異なるという事実について何をすべきかについては、2つの選択肢があります。

  1. 可能であれば、UMLをブレーンストーミング/ホワイトボードの演習として扱い、捨ててください。
  2. ただし、何らかの契約またはプロセスでUMLを生成する必要がある場合は、自動UMLジェネレーターを介してコードを実行し、これらの図を生成します。そして、これを行う必要性を取り除くためにあなたの会社の文化を変えようとしてください。
0
David Arno

デザイン(この場合はUML)を思い付くと、コードが最終的にどのようになるかを視覚化するのに役立ちます。コードに変換できないメソッドを持つクラスを用意する価値はありません。コードと一致します。インターフェイスの継承は可能だが、UMLに表示する必要がある継承のケースがない限り、SearchBookActionHandlerなどのメソッドをクラスの設計に含める必要があります。ソフトウェアアーキテクチャが設計段階にある場合...はい因数分解されます。

0
wanjiku