PlantUML デザインパターン
はじめに
PlantUMLは、テキストベースでUMLを記述するための、おそらく世界で最も普及したツール。
テキストベースなので、gitを使ったUMLの変更管理などが容易で、マウスを使わずにUMLをさくっと書けるメリットがある。
ここでは、PlantUMLを記述する上で参考になるデザインパターンを紹介する。
- パターン未適用
デザインパターン未適用の状態のPlantUMLファイルとその課題を述べる。 - パターン適用
デザインパターンを適用したPlantUMLファイルとその利点を述べる。
Packageパターン
パターン未適用
1つのPlantUmlファイルに複数のパッケージが定義される。
package shop {
class Shop
Shop *-- Item
}
package customer {
class Customer
Customer --> Item : buy
}
クラスが増えるほどファイルが肥大化してメンテナンス性が劣化する。
パターン適用
パッケージ毎にファイルを分ける。
package shop {
class Shop
Shop *-- Item
}
package customer {
class Customer
Customer --> Item : buy
}
クラス増加時にもファイルが肥大化しにくく、メンテナンス性を維持できる。
Arrowパターン
パターン未適用
オブジェクト間の依存関係をextends
やimplements
といったキーワードで記述する。
class Parent
class Child extends Parent
この表現には以下の問題がある。
- 矢印向きを指定できない。
- 個々のオブジェクトを表現する
class
宣言と、"矢印"というレイアウトを指定するextends
キーワードが混ざっている。
パターン適用
Arrowパターンを適用した例を以下に示す。
class Parent
class Child
Parent <|-up- Child
Arrowパターンは個々のオブジェクトのコンテキストを保持するclass
宣言からレイアウト情報を保持する矢印を分離する。
コンテキストとレイアウトの分離により、より柔軟な図表現が可能となる。上記の例では矢印にup
キーワードを使うことで矢印の向きを逆向きにした。
Includeパターン
パターン未適用
start/endsub
と includesub
キーワードをつかって、PlantUMLファイルをオブジェクト指向の構造にまとめよう。
次のようなUMLを書くことを考えてみよう。
Activity
クラスはactivities
パッケージの一部であり、アブストラクトクラスActivityEdge
を集約する。このUMLを、1つのPlantUMLファイルに記述すると次のようになるだろう。
@startuml
package activities {
class Activity
}
abstract class ActivityEdge
Activity "0..1" *-- "*" ActivityEdge
@enduml
このとき、activities
パッケージ内のActivity
クラスとパッケージ外のActivityEdge
クラスが、同じファイル内に書かれることになる。
こうすると、たとえばactivitiesパッケージだけを図示したい場合や、他のクラス図にActivityクラスを載せたい場合にコードクローンするしかなく、不便である。
パターン適用例
ここで使えるのが、start/endsub
と includesub
キーワードである。前述のPlantUMLファイルをこのキーワードを使って2つのファイルに分割する。
@startuml
!startsub interface
package activities {
class Activity
}
!endsub
@enduml
@startuml
!includesub activity.puml!interface
!startsub interface
abstract class ActivityEdge
!endsub
Activity "0..1" *-- "*" ActivityEdge
@enduml
感嘆符!
は、PlantUMLのプリプロセッサ命令を意味する記号である。
activity.puml
の!startsub interface ... !endsub
は、interface
という名前のサブパートを宣言するプリプロセッサ命令である。このサブパートは、!includesub
キーワードを使って、別のPlantUmlから呼び出すことができる。
index.puml
の!includesub activity.puml!interface
は、activity.puml
のinterface
サブパートを呼び出すプリプロセッサ命令である。
このように、start/endsub
と includesub
キーワードを用いてactivities
パッケージを再利用しやすい別のファイルに分割することができた。
Author And Source
この問題について(PlantUML デザインパターン), 我々は、より多くの情報をここで見つけました https://qiita.com/kannkyo/items/7644e9988edf64c500ab著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .