我认为这里最主要的是迭代速度。提出构架思想时,通常会来回走动。只要该图仍在白板上,就很容易在此处和此处删除几行,并在其他位置添加几行。
使用诸如LucidChart或Draw.io之类的工具的拖放功能可以解决此问题。话虽如此,我遭受了流浪箭头的侮辱,使自己迷惑在错误的盒子上。这不是最糟糕的事情,也不是最难解决的事情,但是我觉得我可以走得更快。
能够委托图看起来如何对其他人来说是一个福音。我知道我可以用Mermaid语法粉碎一个图,该图看起来会很好。不要误会我的意思-没有图形设计奖能如愿以偿,但总的来说,该图是正确的并且看起来很干净。
这是我与美人鱼一起写的一个简单示例。请采取以下情况。服务A计划一项任务在某个时刻与外部服务一起运行-考虑某种无法立即执行的过程,例如计划的任务。我们立即得知任务调度是否有效。如果一切顺利,则最终将作业委派给工人,该工人执行分配的任务。完成此操作后,工作人员就会将Webhook通知发送到服务B,从而使我们能够执行所需的任何进一步处理逻辑。现在,我要使用美人鱼语法来描述它。看起来像这样:
sequenceDiagram参加者服务A参加者外部服务工作者参加者外部服务工作者Worker参加者服务B服务A->> +外部服务:createJob(notifyEndpoint,jobParameters)外部服务-> id>服务A:jobSched ->> +外部服务工作者:startProcessingJob(id)-外部服务工作者->> +外部服务工作者:processJob(id)外部服务工作者->> +服务B:dispatchWebhookToNotifyEndpoint(notification)服务B ->> +服务B:handleWebhook(通知)
序列图使我可以在代码中简洁地表达事件链,但是在图中却很丰富。我能够快速轻松地表示操作上的怪癖。例如,作业处理的初始化是异步的。它不会立即发生,但会在将来的某个特定时间发生。在图中,我可以用虚线来表示,而在图中的代码中,就像-> +一样容易。序列号使我可以轻松地与其他人讨论该图,因为我们可以根据他们的编号来参考步骤。并且添加它们就像生成图表时包含一个参数一样容易:
现在,所有示例可能都不是最强大的用例。这有点简单,并且用GUI将看起来像这样的图放在一起并不是一件容易的事。实际上,这些图还有很多事情要做。
但是将其组合到代码中对我来说感觉要快得多。我笨拙地使箭头磁化到WSYWIG Web GUI的右侧框中,因此该图无懈可击。这整个过程花了我两到三分钟的时间来写-我花了更多的时间来思考这个场景。我可以将生成的图像放入票证或松弛消息中,并将其用作传达我的思维过程的视觉辅助。即使架构在现实中更加复杂,我也感觉不到无法使用这些工具来表达它们。
有趣的是,随着时间的推移,我更有可能发展这张图。它并不需要我永远保存白板。我可以稍后再回来,并根据反馈或您的意见进行快速调整或编辑。我每天都会编写代码,因此作为一种构建方法的方法-我已经习惯了。如果我犯了一个错误,或者如果我想在某个地方进行一些调整,那么我可以做到这一点而不必大惊小怪。如果愿意,我什至可以将它们提交到源代码管理中。
在保持速度,正确性和清晰度的同时构造图表的能力几乎是我所需要的。如果我要绘制一个特别漂亮的图表(也许是用于外部眼睛),则可以使用拖放工具。较复杂的自动生成图往往具有一些视觉怪异。但是,在我希望图表可以发展的地方,这些工具可以很好地填补这一空白。将图表作为服务提供的托管服务可以看到这些工具中的价值。例如,LucidChart支持其自己的语法风格,而Draw.IO支持PlantUML和Mermaid语法。
伊什白板上的书写感觉仍然更快-至少对于初始构造而言。而且,在板上进行蚀刻时,与人来回交流会更容易。
但是,我可以从代码中更快地生成图表。美人鱼和PlantUML的语法非常简单,经过一番练习后很容易记住。从某种意义上讲,它感觉与白板的访问方式不同。我们不必在同一个房间内进行协作。这里的逃生方法是,我们始终可以切换到使用WSYWIG来构造图。它的速度较慢,但是如果某人不熟悉语法,并且不值得他们加速使用,则可以选择。
除此之外,它还使我能够抢先记录所需的任何文物。在票务的规划阶段制作一个快速图表,然后我可以将其演变为更正式的东西,这无疑是一个巨大的胜利。
将图构造为代码并不能替代白板为我所做的一切。但这足够快,易于上手,也很容易让远程人员参与。如果每个人都知道语法,远程协作就很容易,尽管使用起来比较慢,但是您仍然可以摆脱WSYWIG工具的麻烦。
我发现,快速序列图可以帮助传达解决方案的心理模型,可以极大地推动进步。 1不幸的是,这并不能在移动设备上呈现超清晰效果,对此我深表歉意。 但是,您应该能够弄清楚我讨论的关键要素。