brunner-medien / pimcore-plantuml
基于pimcore类定义的PlantUML类图生成
Requires
- jawira/plantuml-encoding: ^1.0
- pimcore/pimcore: ^10.0
Requires (Dev)
- phpstan/phpstan: ^1.4
- phpstan/phpstan-symfony: ^1.1
- symplify/easy-coding-standard: ^10.0
README
需求
- Pimcore >= 10
介绍
此包允许您根据项目中的类定义创建UML类图。实际上,您的常规工作流程通常是相反的 - 您根据项目的需求设置Pimcore,这可能涉及一些建模。
然而,手工制作的模型往往过时。这正是此包变得有用的地方。它为PlantUML创建源代码,这是一个基于文本的UML渲染引擎。
PlantUmlBundle不会为您创建图像文件,而是创建源代码。以下是一些原因:
- 有了源代码,您仍然可以编辑和版本控制您的图
- PlantUML拥有出色的IDE集成(PhpStorm、VisualCode、Atom都有它们自己的PUML扩展)
如果您只是想试一试,有一个在线渲染器可用:https://plantuml.com/plantuml。
支持的数据类型
支持所有Pimcore原生数据类型,包括
- 简单类型(如文本、日期、数字、地理位置、quantityValues等)
- 所有关系类型,包括高级类型
- 块
- 分类存储
- 字段集合
- 对象块
- 资产和文档及其子类型
安装
这里没有什么特别之处,只需通过composer安装并通过Pimcore后端或控制台命令启用即可
$ composer req brunner-medien/pimcore-plantuml
$ bin/console pimcore:bundle:enable PlantUmlBundle
使用方法
PlantUmlBundle在Pimcore的“设置”>“PlantUML”中具有后端集成。此菜单(以及所有管理员API调用)仅对管理员用户可用。
每个配置都有自己的作用域。想象一下,您有一个大型项目,包含数十个对象 - 一个显示所有类的单个类图可能不太有帮助。相反,您可以从“对象”命名空间树中选择至少一个或多个“种子”对象。从这些种子开始,所有相关项都成为您的类图的一部分。
这样,您可以将图分解成不同的方面,只显示从一个角度来看相关的信息。
翻译
如果您已经将类名和字段标签翻译了(使用管理员翻译),您可以选择使用这些。对于类属性,还会显示技术(getter)名称。
模板
PlantUML源代码使用Twig生成。您可以根据需要调整默认模板或注册自己的模板。
config.yml
plant_uml:
templates:
-
name: 'CustomTemplate'
path: '@AppBundle/PlantUml/_templates/custom_template'
类和构造型
从Pimcore的类(以及对象块/分类存储)定义生成类图通常会生成一些未显式定义的额外类。这是必要的,以便保留正确的多重性注释。例如,块字段会生成一个具有自己的属性和关联的专用类,具有类型为Composition的“0..n”关联,其中n是块字段中定义的允许的块的数量。非对象类有自己的构造型,并以不同的颜色显示。
关联类
当一个关系允许多个对象(或文档/资产类型)时,事情会稍微复杂一些。在类图中可视化这种关系没有“标准”的方法。PlantUmlBundle创建了一个所谓的“关联类”——一个由菱形形状可视化的匿名类。允许的类“实现”这个关联类,因此具有类型为实现的关系。这可能不是纯标准的UML,但再次有助于尽可能正确地可视化你的关系。
关系类
类型为“高级多对多”的关系也会在两个相关类之间创建一个专用类。这些“关系类”有自己的“关系” Stereotype。
泛化关联
泛化关联是为文档、资产及其子类型(如图像、视频、存档等)创建的。
示例
这个基本示例展示了PlantUmlBundle的一些功能
- “产品”对象有一个名为“usps”的Pimcore块字段,允许最多5个块。
- “产品”对象有一个名为“assets”的“高级多对多”关系。
- 该关系允许在关系类中定义“doctype”属性。
- 此关系的允许资产子类型是“文档”和“存档”,两者都是“资产”类的泛化。
- “heroImage”是一个必需的图像字段类型,因此是一个“1..1”关系。
- “images”是一个Pimcore字段类型的图像画廊的“0..*”关系。
- “heroImage”和“images”都与“Image”相关联,后者也泛化“资产”。
- 产品和颜色的属性“名称”是本地化字段,由地球符号表示。
- 产品的“长度”和“宽度”属性是数量值,其中[m,cm,mm]是有效的单位。
生成的PUML
@startuml
hide empty attributes
hide empty methods
hide circle
skinparam shadowing false
skinparam classFontStyle Bold
skinparam ActivityBackgroundColor Silver
skinparam ActivityBorderColor DimGray
skinparam class {
BackgroundColor Cornsilk
ArrowColor DimGray
BorderThickness 1
BorderColor DimGray
BackgroundColor<<block>> Silver
BackgroundColor<<objectbrick>> LightPink
BackgroundColor<<fieldcollection>> LightPink
BackgroundColor<<classification>> LightPink
BackgroundColor<<asset>> PowderBlue
BackgroundColor<<document>> PaleGreen
}
title "Class diagram sample"
class "Image" as Asset\Image <<asset>> {
}
class "Asset" as Asset <<asset>> {
}
class "Category" as Object\Category {
**name**: varchar[190] / input
}
class "Color" as Object\Color {
**name**: varchar[190] / input <&globe>
}
class "Product" as Object\Product {
**gtin**: varchar[190] / input
**name**: varchar[190] / input <&globe>
**description**: text / wysiwyg <&globe>
**length**: float / quantityValue [m/cm/mm]
**width**: float / quantityValue [cm/m/mm]
}
diamond Object\Product\Assets\Association
class "Archive" as Asset\Archive <<asset>> {
}
class "Document" as Asset\Document <<asset>> {
}
class "Assets" as Object\Product\Assets <<relation>> {
**doctype**: select
}
class "Usps" as Object\Product\Usps <<block>> {
**title**: varchar[190] / input
**description**: text / wysiwyg
}
Asset\Image --|> Asset
Asset\Archive ..|> Object\Product\Assets\Association
Asset\Archive --|> Asset
Asset\Document ..|> Object\Product\Assets\Association
Asset\Document --|> Asset
Object\Product "0..*" --- "0..*" Object\Color : colors >
Object\Product "0..*" --- "0..1" Object\Category : category >
Object\Product "0..*" --- "1..1" Asset\Image : heroImage >
Object\Product "0..*" --- "0..*" Asset\Image : images >
Object\Product "0..*" ---- "0..*" Object\Product\Assets\Association : assets >
(Object\Product,Object\Product\Assets\Association) -- Object\Product\Assets
Object\Product "1..1" *-- "0..5" Object\Product\Usps : usps >
@enduml