我注意到doxygen使用graphviz库来创建图表.您是否曾使用graphviz生成文档?是否值得在doxygen范围之外学习graphviz用于文档目的?或者我最好坚持像Visio这样的标准数据建模软件包?
我理解它作为图形库的优点,但是为了尝试表示更复杂的UML(或类似的),它还值得研究吗?
graphviz是用于创建图形的非常简单的语言/格式.如果能力足够你我会推荐它(它很容易,我估计最多1小时学习的时间).
如果您只是在谈论像Doxygen那样创建继承/协作图表,那么值得研究一下能够自动为您完成这项工作的IDE.对于从头开始或手动调整的文档,我使用OmniGraffle(因为我在Mac上),我强烈推荐.
但是,GraphViz和DOT非常方便,不仅用于文档,还用于调试和代码理解,特别是对于数据结构.我通常不会手工编写DOT,但自动生成的DOT非常值得付出最小的努力.
我发现GraphViz非常有用的地方之一是理解和调试二进制搜索树算法.我开发了CHDataStructures.framework,一个开源的Objective-C框架,其中包括几种BST.我实现了两个方法:-(NSString*)dotGraphString
在父类和-(NSString*)dotGraphStringForNode:
每个子类上.在大约30-40行代码中(大部分位于底部CHAbstractBinarySearchTree.m
),我添加了迭代遍历二叉树并创建它的DOT表示的能力,包括平衡信息,着色节点红色或黑色等.(稍加注意,您可以轻松地表示空的前哨节点并以正确的排序顺序显示树.)
在我的测试代码中,在每次修改树之后,我调用 - dotGraphString
并将结果保存到.dot文件,在那里用断点停止,然后用GraphViz打开该文件,这很聪明,可以在重新渲染DOT图时文件已更新.这种方法使得查看树中发生的事情以及发现给定算法的实现中的错误变得非常容易.这种方法可以相当容易地适用于各种类型的数据结构,并且通常比仅仅为了可视化结构而创建UI更快更容易.
Graphviz不会像Visio那样为您提供光滑的图形界面.然而,它将产生布局良好的图表.当我通过程序自动生成图形时(如在doxygen的情况下),我发现它最有用.
Graphviz对于以编程方式生成依赖图(通过点)非常有用.访客使用它来可视化网站访问; Hadoop/Cascading使用它来可视化map-reduce作业的执行计划.
我将GraphViz广泛用于文档,并经常使用GraphViz从外部勾画出关系或架构图,然后使用@ dot/@ enddot将它们添加到我的Doxygen代码中的额外页面.我最近也开始使用@dotfile,它具有将大型点语句保留在代码文档之外的双重好处,并允许我继续使用GraphViz GUI预览它们.
GraphViz的另一大好处是简单的文本格式与版本控制非常兼容.您可以在git diff中看到对图表的更改,这对于任何二进制文档格式都是不可能的.多年来,我越来越多地使用它,这对我来说正变得越来越重要.
但是,对于UML,我使用真正的UML工具(Enterprise Architect)而不是在Visio中填充.