cesium 围绕
在Trenches的Integration Testing中 ,我大量使用了UML图。 到目前为止,我已经尝试并使用了许多UML编辑器。 我用过:
- NetBeans附带的一个-过去时,他们将其删除
- 微软Visio
- Modelio-这可能是最好的之一
- 我不记得的其他人
我得出以下结论:在大多数时候(始终读),我只需要记录API或要设计的内容,而无需遵循最新的UML规范。 宽松就足够了。
真正的UML编辑器不接受松散,毕竟是UML。 UML绘图工具就是这样-绘图工具,上面有一层。 所有这些都有以下问题:
- 他们消耗很多资源
- 它们具有自己的专用文件格式,您可以从中生成图像
我对图像感兴趣,但想将文件保存在该位置,以防万一我需要更新。
植物UML
然后我来到了PlantUML上 ,我感到很高兴。 PlantUML定义了一种简单的文本语法,可从中生成UML图图像。 到目前为止,我已经知道生成PlantUML图的3种方法:
- 在线表格
- Confluence插件
- 在机器上安装东西
我使用了前2个,趋向于第一个,因为Confluence要求您保存以生成图像。 这对初始定义很有用。 但是,当不得不浏览全部〜60张图以更高的分辨率更新它们时,这会有些无聊。
因此,我决定围绕PlantUML开发一个批次,该批次将执行以下步骤:
- 从文件夹中读取PlantUML描述文件
- 通过在线表格从中生成图像
- 将生成的图像保存在文件夹中
可以将批处理运行配置为应用所有描述文件共有的设置。 这批代码不仅有用,还应该教给我一些东西,并且对代码很有趣(请注意,有时这些目标是相反的)。
整体架构
我是Spring的狂热爱好者,但我希望基础完全不受任何依赖。
-
plant草
-
定义非常基本的API。 它仅包含Exception和根接口,该接口扩展了Java 8的
Function<I,O>
。 这种方式不仅仅是炒作,它还使用户类可以一起组成函数,这是我迄今为止在Java中看到的最大的组合潜力。
植物在线
-
使用JSoup库连接到联机服务器。 还实现了从文本文件读取并将结果写入图像文件的功能。
茄子批次
-
将所有内容调整为Spring Batch模型。
功能的力量
在Java 8中, Function<I,O>
是通过其apply()
方法apply()
类型I
的输入转换为类型O
的输出的接口。 但是,借助Java 8的默认方法的强大功能,它还提供了compose()
和andThen()
方法的实现。
这样可以在流程管道中链接Function
调用。 可以定义一个基本的JPLantUml
实现,该实现将String
应用于byte
数组以进行简单的调用,而更复杂的实现则对File
(描述)和…( File
(结果图像)执行相同的操作。 但是,后者仅包含3个功能:
- 文件读取器,用于读取描述文件的内容,从
File
到String
- 从
String
到byte[]
的PlantUML调用处理器byte[]
- 一个文件编写器,用于将图像文件从
byte[]
写入File
而且,我们已经有了函数组成。 这种细粒度的特性使我们可以对读取器和写入器功能进行一些单元测试,而无需进行任何复杂的模拟。
结果
这段代码的结果就是这个Github项目 。 它使您可以使用以下命令行:
java -jar ch.frankel.jplantuml.batch.Application globalParams="skinparam dpi 150; hide empty members"
这将从/tmp/in
读取所有PlantUML文件,应用上述参数,并在/tmp/out
生成结果图像文件。 可以使用标准Spring Batch属性覆盖来设置输入/输出文件夹。
cesium 围绕