https://blog.csdn.net/sjtu_xiaoxin/article/details/19487801

 

···

plantuml 也支持 dot 语言

 

···

 

最近需要设计一个统一数据访问层,根据同事设计的架构,要画出一幅数据流图。由于一直使用zim wiki作为自己的学习工作笔记,所以自然的使用了它的画图插件——Graphviz。这是一款使用语言脚本画图的工具,强调“所思即所得”,使用者不必过多考虑图形的设计,而集中精力于节点间的关系。下图就是画出的效果图,没有对默认颜色颜色和形状进行大的调整。

这个图形基本满足了我对数据流图的设想,而我也没有浪费时间在调整节点位置上。在画图的过程中,我遇到两个问题比较难解决,这里记录一下作为参考。

(1)中文显示乱码问题

(2)底部空节点如何没有label标签显示问题

对于第一个问题,我参考了http://blog.163.com/prevBlogPerma.do?host=lockriver&srl=487232242010101761749383&mode=prevhost=lockriver&srl=487232242010101761749383&mode=prev这篇blog的解决方案,就是将node和edge的字体属性设为仿宋,由于文件本来就是使用unicode,我并未对编码格式进行修改。blog中说Graphviz不支持中文,我想这种说法有些问题,应该是字体不支持中文。

对于第二个问题,我有三个办法解决

(1)笨方法,编辑生成的图片,用橡皮擦擦掉;

(2)小笨方法,使用空格作为输入的标签;

(3)正规方法,将节点的style属性设置为”invis“,即invisible,不可视。

这个图片的dot脚本如下:

[plain] view plain copy

  1. digraph DataAccessLayer {
  2.     node[fontname=”FangSong”];
  3.     edge[fontname=”FangSong”];
  4.     entity[shape=”box”,label=”业务逻辑应用”];
  5.     process1[shape=”oval”,label=”接口方法”];
  6.     process2[shape=”oval”,label=”模型解析”];
  7.     process3[shape=”oval”,label=”RDMS接口”];
  8.     process4[shape=”oval”,label=”NoSQL接口”];
  9.     process5[shape=”oval”,label=”FS接口”];
  10.     process6[shape=”oval”,label=”其他接口”];
  11.     process7[shape=”oval”,label=”原始数据合并”];
  12.     process8[shape=”oval”,label=”数据模型转化”];
  13.     process9[shape=”oval”,label=”访问数据处理”];
  14.     persist1[shape=”underline”,label=”普通数据库”];
  15.     persist2[shape=”underline”,label=”分布式数据库”];
  16.     persist3[shape=”underline”,label=”NoSQL数据库”];
  17.     persist4[shape=”underline”,label=”文件系统”];
  18.     persist5[shape=”underline”,label=”其他存储系统”];
  19.     entity->process1[label=”访问对象”];
  20.     process1->process2[label=”数据访问对象”];
  21.     process2->process3[label=”RDMS访问对象”];
  22.     process2->process4[label=”NoSQL访问对象”];
  23.     process2->process5[label=”FS访问对象”];
  24.     process2->process6[label=”其他接口”];
  25.     process3->persist1[label=”普通数据库访问语句”];
  26.     process3->persist2[label=”分布式数据库访问语句”];
  27.     process4->persist3[label=”NoSQL访问语句”];
  28.     process5->persist4[label=”文件系统查询语句”];
  29.     process6->persist5[label=”其他存储系统语句”];
  30.     {persist1,persist2,persist3,persist4,persist5}->process7[label=”原始数据对象”];
  31.     process7->process8[label=”合并统一数据”];
  32.     process8->process9[label=”数据模型对象”];
  33.     end[shape=”none”, style=”invis”];
  34.     process9->end[label=”返回数据模型对象”];
  35. }

计划有时间的话将简单介绍dot语言的基本使用方法。

发表评论

电子邮件地址不会被公开。