brunner-medien/pimcore-plantuml

基于pimcore类定义的PlantUML类图生成

1.1.5 2023-04-02 13:32 UTC

This package is auto-updated.

Last update: 2024-10-01 00:10:34 UTC


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]是有效的单位。

Sample class diagram

生成的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