*V*+---STARTUP----+*
*
V
*
DRAIN----+*
*
V
*+---PROBE_BW----+*
^
*
*
+----+
*
*+----PROBE_RTT--+大多数人都因为ASCII的使用不便和耗费时间,而宁愿选择实际的图形工具。而先画图再写代码或者先写代码再画图会导致重复性工作和两者不同步,因此应该以状态模型作为唯一的标准——如同用其他语言编写项目的某些部分,一切只为了选择最佳表现形式。只要一切都能自动构建和集成,并且版本控制也能正常使用,那就很好。但是,一般情况下事实并非如此:因此才有了上述ASCII画的图形。那么我们可以改变这种状况吗?我们是否可以合理地同时使用代码和模型,并用版本控制管理两者?能否不需要大量的额外工作,特别是在使用的时候不需要额外工作?好了,废话你也看够了,下面开始上干货。三位芬兰剑客:Linux,Git和MetaEdit+由于编程的黄金标准是Linux,版本控制的黄金标准是Git,而两者都源自芬兰,让我们来看看怎样让第三个芬兰朋友与两者融合提供帮助。MetaEdit+是一个建模工具,也是一个语言工作台(一种可以让你轻松地创建自己的建模语言和代码生成的工具)。很方便的一点是,它还支持Linux、Git以及IDE等其他集成工具。而且它还有一个很好的“数字手表”的状态机示例及其完整的代码生成功能。完整的代码生成功能?!那岂不成了一个可怕的流程图,上面充斥着IF,GOTO和IDE不支持的内联代码片段?又或者非常笨重,难以阅读,效率低下的一堆代码吗?幸运的是不会。这种图形语言和它的代码生成器都是领域专用的,也就是说是针对任务微调过的(例如制作数字手表应用的任务)。因此,里面的东西大家都认识,如果你没有接触过该领域的工作,那么这一切也许对你来说很陌生,但是你依然可以理解模型和代码。上述是一个秒表应用程序的图。这个手表可以处于多种状态,你可以按按钮进行操作并移至新状态,操作类似于设置时间变量或打开显示屏上的图标等。简而言之,该应用的内部处理由代码生成和一个小状态机框架组成,你可以通过该语言从手表终端用户的角度进行设计。你可以试试看Linux下的MetaEdit,如果你的IDE使用Eclipse的话,还可以下载Eclipse插件。有关详细信息,请参照该手表的示例: