架构算法设计模式和编程理论软件匠艺流程图

CodeReview利器-ZenUML

2019-05-26  本文已影响254人  CodingDetails

现状

有没有CodeView时,给别人巴拉巴拉讲了一堆,结果大多情况下只对结尾部分提问,遇到老手则会从开头部分提问。中间部分呢?看大家表情就知道,都没跟上思路。

这里需要个图

受不了的程序员,则会提出要求:这段逻辑超过3个流程,需要个图来帮助大家理解。

不用了吧,代码都实现了,还用画图?

画图这件事,轮到别人使劲往上推,轮到自己使劲往外推。

为什么画图这么反人性?

  1. 程序员写代码用IDE,画图需要打开另一个软件,切换麻烦,不符合这个标准
  2. 代码没写前,图上画什么呢?就算画上八成也会再改,更不符合都标准
  3. 代码写好后,画起来也别扭,位置挪来挪去始终不满意,画完也没有成就感

为了解决第1个问题,主流的IDE都通过插件的方式支持了画流程图的功能,如MarkDown插件本身就有flow的功能,还有增强的PlantUML基本能满足大部分要求。

还是不好用

  1. 这些flowPlantUML画起来太麻烦,一条线得用十几甚至几十个字母,而且整块代码有大量重复,透着浓浓的坏味道
  2. 那使用直接从源码生成的调用关系图?可以想象这样生成的图要么太大,要么太乱,况且我们只需要画代码中的一部分流程,生成的图一般不可能凑巧把我们需要的部分画在一起

画图能做到零负担吗?

ZenUML

主角登场了,直接上例子,就拿上周做的FizzBuzz来展示。
画图的源码如下:

@Starter(main)
ruleSet = RuleSet.all() {
  DivideRule.create(3, Fizz)
  DivideRule.create(5, Buzz)
  ContainsRule.create(3, Fizz)
  ContainsRule.create(5, Buzz)
}

game = new Game(ruleSet)

game:Game.play(count) {
  for (i < count) {
    item = new FizzBuzz(i)
    result = item:FizzBuzz.apply(ruleSet)
    println(result)
  }
}

item:FizzBuzz.apply(ruleSet) {
  atomicResult = ruleSet.apply(i)
  componentResult = reduce(atomicResult)
  result = getOrElse(componentResult, defaultResult)
}

渲染效果


main FizzBuzz.apply

如何使用?

上一篇下一篇

猜你喜欢

热点阅读