PlantUML 디자인 패턴
6751 단어 plantuml
소개
PlantUML는 텍스트 기반 UML을 설명하는 아마도 세계에서 가장 인기있는 도구입니다.
텍스트 기반이므로, git를 사용한 UML의 변경 관리 등이 용이하고, 마우스를 사용하지 않고 UML을 빨리 쓸 수 있는 메리트가 있다.
여기에서는 PlantUML을 기술하는데 있어서 참고가 되는 디자인 패턴을 소개한다.
디자인 패턴 미적용 상태의 PlantUML 파일과 그 과제를 설명한다.
디자인 패턴이 적용된 PlantUML 파일과 그 이점을 설명합니다.
Package 패턴
패턴 미적용
하나의 PlantUml 파일에 여러 패키지가 정의됩니다.
Arrow 패턴 미적용package shop {
class Shop
Shop *-- Item
}
package customer {
class Customer
Customer --> Item : buy
}
클래스가 늘어날수록 파일이 비대화되어 유지보수성이 열화된다.
패턴 적용
패키지별로 파일을 나눕니다.
Arrow 패턴 적용package shop {
class Shop
Shop *-- Item
}
Arrow 패턴 적용package customer {
class Customer
Customer --> Item : buy
}
클래스 증가시에도 파일이 비대화하기 어렵고, 유지보수성을 유지할 수 있다.
Arrow 패턴
패턴 미적용
객체 간의 종속성은 extends
또는 implements
와 같은 키워드로 설명됩니다.
Arrow 패턴 미적용class Parent
class Child extends Parent
이 표현에는 다음과 같은 문제가 있습니다.
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
}
패턴 미적용
객체 간의 종속성은
extends
또는 implements
와 같은 키워드로 설명됩니다.Arrow 패턴 미적용
class Parent
class Child extends Parent
이 표현에는 다음과 같은 문제가 있습니다.
class
선언과, 「화살표」라고 하는 레이아웃을 지정한다 extends
키워드가 섞여 있다. 패턴 적용
Arrow 패턴을 적용한 예를 이하에 나타낸다.
Arrow 패턴 적용
class Parent
class Child
Parent <|-up- Child
Arrow 패턴은 개별 객체의 컨텍스트를 유지합니다
class
선언에서 레이아웃 정보를 보유하는 화살표를 분리합니다.컨텍스트와 레이아웃을 분리하면 더 유연한 다이어그램이 가능합니다. 위의 예에서는 화살표에
up
키워드를 사용하여 화살표의 방향을 역방향으로 했다.Include 패턴
패턴 미적용
start/endsub
및 includesub
키워드를 사용하여 PlantUML 파일을 객체 지향 구조로 결합합니다.
다음과 같은 UML을 작성하는 것을 생각해 보자.
Activity
클래스는 activities
패키지의 일부이며, 추상 클래스 ActivityEdge
를 집계한다. 이 UML을 하나의 PlantUML 파일에 설명하면 다음과 같이 보일 것입니다.
all.puml@startuml
package activities {
class Activity
}
abstract class ActivityEdge
Activity "0..1" *-- "*" ActivityEdge
@enduml
이 때, activities
패키지내의 Activity
클래스와 패키지외의 ActivityEdge
클래스가, 같은 파일내에 쓰여지게 된다.
이렇게 하면 예를 들어 activities 패키지만을 도시하고 싶은 경우나 다른 클래스 다이어그램에 Activity 클래스를 올리고 싶은 경우에 코드 클론할 수밖에 없어 불편하다.
패턴 적용 예
여기서 사용할 수 있는 것은 start/endsub
와 includesub
키워드이다. 위의 PlantUML 파일을 이 키워드를 사용하여 두 개의 파일로 나눕니다.
activity.puml@startuml
!startsub interface
package activities {
class Activity
}
!endsub
@enduml
index.puml@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
패키지를 재사용하기 쉬운 다른 파일로 나눌 수있었습니다.
Reference
이 문제에 관하여(PlantUML 디자인 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kannkyo/items/7644e9988edf64c500ab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@startuml
package activities {
class Activity
}
abstract class ActivityEdge
Activity "0..1" *-- "*" ActivityEdge
@enduml
@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
Reference
이 문제에 관하여(PlantUML 디자인 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kannkyo/items/7644e9988edf64c500ab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)