如何表示调用其他独立函数的独立函数

How to represent standalone functions calling other standalone functions

我正在记录 javascript 包的当前状态,该包由几个主要由独立功能组成的模块组成。由于广泛使用回调,该包包含来自多个包的独立函数之间的嵌套调用。

考虑到这一点,有谁知道在序列图中表示独立函数之间调用的最佳方式是什么?

独立功能的细节是否值得?

一个常识建议避免陷入 UML as graphical programming language 的陷阱。更容易用代码表达并且易于被 reader 理解的东西最好保留为代码。更喜欢使用 UML 给出大图,并解释在代码中不太明显的复杂关系。

自动化明显的文档?

手动为非常精确的序列图建模非常耗时。而且,这样的图表很快就会随着下一个版本的代码而过时。

因此,如果您的兴趣是概述函数之间的关系,您可能有兴趣使用更简单的 call graph 来提供直观的概述。 reader可以很容易的掌握整体结构,在代码中寻找更多细节:

优点是这个任务可以自动化,使用市场上可用的许多调用图生成器之一(google for javascript 调用图生成器 找到一些)。顺便说一下,有一本关于进一步自动化文档的好书,我只能热情地推荐它:“Living Documentation: Continuous Knowledge Sharing by Design, First Edition

如果您必须将重点放在调用的详细时间顺序上,那么调用图是不够的。在这种情况下,序列图可能确实更相关。

具有独立函数的 UML 序列图?

A sequence diagram shows interactions between lifelines 在一个封闭的 classifier 中。生命线通常用来表示一个对象,即一个class的实例,但它的定义足够灵活,可以容纳任何交互参与者。

单独的独立函数还可以被视为实例化更通用的 class 函数的单独对象(这是函子背后的概念,如 C++ std::function)。这在 javascript 中尤为重要,其中函数可以分配给变量或用作参数。所以你可以使用一条生命线来澄清这一点。由您决定如何命名呼叫消息(例如 operator()(a,b,c) 或使用其真实名称以提高可读性?):

您还可以 到一个伪 class 中,它将在您的模型中代表一个模块、编译单元或命名空间。尽管模块不是严格意义上的对象,但您可以在建模中将其视为只有一个(匿名)实例的 class(即其状态将是模块范围内定义的全局变量。相关的独立函数可以看作是这个虚构class)的操作。生命线将对应于一个模块,函数调用将表示为发送给另一个模块的同步消息或发送给自身的消息,并带有嵌套激活以可视化“嵌套”调用。