CodeReview利器-ZenUML

现状

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

这里需要个图

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

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

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

为什么画图这么反人性?

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

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

还是不好用

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

画图能做到零负担吗?

  • 思维不能切换,主线是代码思维,不能因为画图而出去
  • 不能比实现代码增加任何东西,多一个单词都是一种罪恶
  • 不能花太多时间,超过1分钟的事都会引发严重的拖延症

ZenUML

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

  • 全部是伪代码表示
  • 关键的模块和接口可以和实现代码复用
  • 对于已经实现的代码,再用伪代码复制一次,如这个例子可以在1分钟内完成
@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

如何使用?

  • 直接在线使用 https://zenuml.com/
  • 主流IDE插件也即将发布
  • 最后也欢迎大家为此神器添砖加瓦
    https://github.com/ZenUml

你可能感兴趣的:(CodeReview利器-ZenUML)