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