我注意到 doxygen 使用 graphviz 库来创建图表。你曾经使用过 graphviz 来生成文档吗?出于 doxygen 范围之外的文档目的而学习 graphviz 是否值得?还是我最好坚持使用像 Visio 这样的标准数据建模包?
我理解它作为图形库的优点,但是为了尝试表示更复杂的 UML(或类似的),它仍然值得研究吗?
我注意到 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 中随意使用。
是的,graphviz 在程序中易于学习和使用。
另请查看yEd,它是处理图表的好工具。与 Visio 不同,它将加载和保存各种易于手动编辑或以编程方式生成的格式。自动布局的东西也很不错。
我偶尔用它来说明状态机。graphviz 非常适合。
同意这里的共识;我从 Graphviz 中获得了很多价值。它非常适合创建简单而不是那么简单的图表。软件开发人员倾向于吸引图表,不仅在源代码中,而且在其他地方也是如此。
例如,现在在另一个浏览器窗口中,我使用 graphviz 图(使用confluence 插件BTW 显示)说明了我们组的分支和合并策略。
Graphviz 也适用于 UML。请参阅本教程;这也是对 Graphviz 的一个很好的介绍。
我们使用 graphviz 自动生成对象图作为我们 UML 验证工具的反馈。我们对结果非常满意,因为我们设法提供了图形结果,而完全不用担心布局。
仅供参考 Microsoft Visio 插件到带有 Graphviz 的布局图:http: //www.calvert.ch/graphvizio/