前要
前段时间,由于工作的需要,开始着手开发一些项目相关的小工具,用来实现将一些文档转换为项目中必须要的配置文件,从而减少一些不必要的重复性的工作,腾出更多的时间来在业务功能上的思考。小工具功能单一,仅需要读取特定规范的文档,读取其中有效的值,装配到预先的配置模版上就好了。一个简单的流程,也没有做必要的拆分,也就一次性的在几个方法中开发完毕,自己使用简单。但考虑到工具使用方便,不需要预装环境,有采用pyinstaller将其转换为exe可执行文件,以命令行的形式可以交互式的进行选择生成制定的文档。从而使得工具原本是一个简单的功能代码,成为了一个交互式的工具。
问题
交互式工具的开发,也就是在某个时刻需要等待用户键盘输入命令,才往下执行的程序。从实现上面只需要使用python的raw_input方法即可,而转换原功能代码,只需要将其中需要外部传入的变量的地方加上即可。功能实现简单,但在开发过程中,却陷入到了交互式编程的困境当中:
1,交互式程序需要预判一些用户非法输入,并确定这些输入是直接过滤,还是进行检查后作为控制条件
2,交互式程序需要考虑用户输入的控制条件,进行停留,回退,跳转,翻页,退出等操作,这些操作不光导致页面展示的变化,也导致提供功能的变化。笼统来说就是流程控制。
这两个问题是十分明显的问题,虽然在不断的修改和调试后成功完成了实现,但代码却存在着一下问题:
1,为了实现对用户非法输入的控制,通过while循环使界面停留在指定的提示内容,直到用户输入合法的命令
2,为了实现长控制链的灵活回退和翻页,不断的在一个while循环中嵌套while循环每个while循环内实现自己功能以及他的子功能,整个程序运行在若干个while循环的嵌套下,分不清楚哪一步是哪一步,流程控制起来也相对复杂,功能和控制流相互交杂,程序看起来非常混乱,为后续拓展开发增加了工作量。
规范化
由于以上的原因,为了简化开发过程,加速功能集成。分析交互式编程中的几个重要的流程,拆分出展示,控制,功能公布分,流程大概为先展示再控制再功能。在展示部分又分为单行提示输入或分页选择输入,规范了在用户之前的提示内容以及输入形式,并单独集成了分页选择部分。控制部分则缩小了校验范围采用单while循环校验普通的非法输入,并对控制命令(quit-返回,exit-退出)做出识别,在控制阶段即将完成通用的校验。当然业务校验也属于控制阶段的一步,为了达到控制的规范化,特别对功能阶段的输出结果进行校验,从而判断是否进行流程控制。功能部分因为无法完全将控制拆分出来,所以在原功能代码中,需要对结果进行专门处理,从而达到后续的控制效果。
代码实现,采用了python的装饰器模式,以上流程进行封装,实现展示+控制+功能的集成。重写主流程控制方法,规范其传入参数为展示参数+位置参数+输出参数,并在该方法上加@装饰器来达到应用装饰器的目的。装饰器展示展示参数+当前位置,并校验输入后将合法的输入传给功能代码,功能代码执行功能后返回。最后实现功能呢。
相较于前面的杂乱的代码,经过规范后的代码更简洁,控制流程也更加清晰,开发中可以复用以前的大部分代码,除了一些特定的控制输出外,基本不需要做任何的改动,从而使得集成其他工具简单快速。
感想
编程规范相较于直接编写代码能够提高代码的质量,逻辑更加清晰,拓展更加容易,也更容易进行查错。所以建议广大农民工在编写代码之前,可以先着手分析代码的原有规范,按照原有规范编程,更能够提高效率和减少错误。
网友评论