Min*_* Le 1 tcl code-maintainability
我和我的团队一直在研究多种工具流程.
我们不断在同一个文件中添加新过程或在同一目录中创建新文件.还有很多嵌套程序; 一个人叫别人.
程序的数量只会不断增加,流程涉及至少10个喜欢做自己的事情的人.
我的问题是,我们将如何以整洁的方式管理所有这些程序?
我们假设您遵循通用软件工程的良好实践(将文件保存在源代码管理中等),就像没有那些您被卡住的那样.
Tcl并不真正支持嵌套procs; 你可以proc从另一个程序内部调用,但它不会做任何类型的范围.
您应该考虑将代码划分为"连贯的API".究竟是什么取决于您的应用程序,但它很少只是一个程序; 特定的对话框或屏幕是一个更有用的单位.这可能最终成为一个程序,但通常是几个相关的程序.
一旦你确定了这些连贯的部分,它们就形成你放入文件的内容,通常是每个文件一个连贯的部分,但是当你这样做时文件相当长,而是使用一组文件(可能在他们的文件中)自己的目录)很有意义.同时,您可能应该将每个连贯片段定义的变量和命令全部放在Tcl命名空间中,这样可以将片段与世界其他部分隔离开来,主要是为了阻止代码在其他脚本上踩踏码.
既然你已经做到了,如果你已经得到了你认为是一个稳定的API,那么你可以把它变成一个Tcl包.这只是通过给它一个更高级别的名称和版本号来完成的; 你把它放在连贯文件中的一个文件中:
package provide YourPackageName 1.0
Run Code Online (Sandbox Code Playgroud)
然后(通常在同一目录中)您创建一个pkgIndex.tcl包含以下内容的文件:
package ifneeded YourPackageName 1.0 [list source [file join $dir yourFilename.tcl]]
Run Code Online (Sandbox Code Playgroud)
也就是说,它说要在Tcl解释器中获取YourPackageName版本1.0,你source就是文件$dir/yourFilename.tcl; 的$dir是在包索引文件一个方便的是指包含当前包索引文件的目录.然后你的其余代码可以不再考虑"阅读正确的文件",并开始考虑"使用这个定义的API".(如果您选择使用Tcl和C甚至纯C代码的混合开始实现包,那就太棒了 ;更改索引文件以使用load正确的东西,其他一切都可能是遗忘的.)它通过以下方式实现:这样做的:
package require YourPackageName
# Give the version if necessary, of course
Run Code Online (Sandbox Code Playgroud)
然后给自己写一些文档(即使它只是将入口点命令列入包中)和测试,并且你已经迁移到一个非常好的代码片段.
在某些情况下,还有一些其他技术可以帮助您制作连贯的作品.特别是,如果您正在使用像TclOO,iTcl或XOTcl这样的OO系统,那么每个类几乎肯定都是候选连贯的一部分.此外,有时最好将几个相关的连贯部分放在一个包中.但是,绝对没有严格的规则.
最后,Tcl使用一堆技术来查找包,但它们主要归结为使用auto_path全局变量进行查找.在您的应用程序主脚本中,最好(如果其余代码主要位于library目录中)使用类似这样的内容作为第一步之一:
lappend auto_path [file join [file dirname [info script]] library]
Run Code Online (Sandbox Code Playgroud)
您还可以pkgIndex.tcl在一个地方收集许多文件的内容,前提是您考虑到移动周围所需的任何路径名更改.