私と私のチームは、しばらくの間、複数のツール フローに取り組んできました。
同じファイルに新しい手順を追加するか、同じディレクトリに新しいファイルを作成し続けます。ネストされたプロシージャも多数あります。1つは他の人を呼び出します。
手続きの数は増え続ける一方、フローには、自分のことをするのが大好きな人が少なくとも 10 人含まれています。
私の質問は、これらすべての手順をきちんと管理するにはどうすればよいでしょうか?
私と私のチームは、しばらくの間、複数のツール フローに取り組んできました。
同じファイルに新しい手順を追加するか、同じディレクトリに新しいファイルを作成し続けます。ネストされたプロシージャも多数あります。1つは他の人を呼び出します。
手続きの数は増え続ける一方、フローには、自分のことをするのが大好きな人が少なくとも 10 人含まれています。
私の質問は、これらすべての手順をきちんと管理するにはどうすればよいでしょうか?
一般的なソフトウェア エンジニアリング (ファイルをソース管理に保持するなど) の優れたプラクティスに従うことを前提としています。
proc
Tcl はネストされたsを実際にはサポートしていません。別のプロシージャ内から呼び出すことはできますがproc
、スコープ設定は行いません。
コードを「一貫した API」に分割するという観点から考える必要があります。それが正確に何であるかは、アプリケーションによって異なりますが、単一の手順になることはめったにありません。特定のダイアログ ボックスまたは画面は、はるかに便利な単位です。それは 1 つの手順になるかもしれませんが、多くの場合、複数の関連する手順になります。
これらの首尾一貫した部分を特定したら、それらはファイルに入れる内容の内容を形成します。通常、ファイルごとに 1 つの首尾一貫した部分ですが、そうするときにファイルがかなり長い場合は、代わりにファイルのグループを使用します (おそらく独自のディレクトリ) は非常に理にかなっています。同時に、おそらく、それぞれの首尾一貫した部分で定義された変数とコマンドをすべて Tcl 名前空間に配置する必要があります。これにより、部分が世界の他の部分から少し分離され、主にコードが他の部分を踏みにじるのを防ぐことができます。コード。
これで、コヒーレント部分に対する安定した API と思われるものを手に入れたら、その部分を Tcl パッケージにすることができます。これは、より高いレベルの名前とバージョン番号を与えることによって行われます。これをコヒーレントピースのファイルの1つに入れます:
package provide YourPackageName 1.0
次に(通常は同じディレクトリに)次のpkgIndex.tcl
ような内容のファイルを作成します。
package ifneeded YourPackageName 1.0 [list source [file join $dir yourFilename.tcl]]
つまり、Tcl インタープリターでYourPackageName
バージョンを取得するには、ファイル; これは、現在のパッケージ インデックス ファイルを含むディレクトリを参照するパッケージ インデックス ファイルで便利です。その後、残りのコードは「適切なファイルを読み取る」ことを考えるのをやめ、「この定義された API を使用する」という観点から考え始めることができます。(これは、Tcl と C の混合、または純粋な C コードを使用してパッケージの実装を開始することを選択した場合に最適です。正しいものを使用するようにインデックス ファイルを変更すると、他のすべてのことを忘れることができます。)やっている:1.0
source
$dir/yourFilename.tcl
$dir
load
package require YourPackageName
# Give the version if necessary, of course
次に、いくつかのドキュメント (パッケージへのエントリ ポイント コマンドをリストするだけであっても) とテストを自分で作成すると、実際に非常に適切に動作するコードに移行しました。
場合によっては、まとまりのあるピースを作成するのに役立ついくつかの追加のテクニックがあります。特に、TclOO、iTcl、または XOTcl などの OO システムを使用している場合、各クラスはほぼ確実に一貫性のあるピースの候補となります。また、いくつかの関連する一貫した部分をパッケージにまとめた方がよい場合もあります。ただし、それに関する厳格な規則はまったくありません。
最後に、Tcl はパッケージを見つけるためにさまざまな手法を使用しますが、そのほとんどはauto_path
グローバル変数を使用して検索することになります。library
アプリケーションのメイン スクリプトでは、最初のステップの 1 つとして次のようなものを使用するのが最善です (コードの残りのほとんどがディレクトリにある場合)。
lappend auto_path [file join [file dirname [info script]] library]
pkgIndex.tcl
物事を移動するために必要なパス名の変更を考慮に入れれば、多くのファイルの内容を 1 か所に集めることもできます。
したがって、TCL に関しては、パッケージと名前空間の作成を探すことができます。それが役立つかどうか教えてください。より詳細な情報を提供できるように