3

アプリケーションがいくつか(〜5)の構成パラメーターを取り、そのアプリケーションがテクノロジー以外のユーザー(KISSなど)によって使用される場合、通常、構成オプションの読み取りと、オブジェクト/関数間でのパラメーターの受け渡しをどのように処理しますか? (複数のモジュール)?

オプションの例:入力および出力ディレクトリ/ファイル名、詳細レベル。

私は通常optparse(Python)を使用し、オプション/パラメーターを引数として渡します。しかし、すべてのモジュールのオブジェクトによって直接読み取られる構成テキストファイルを使用する方が一般的かどうか疑問に思います(ただし、これは「グローバル」変数を持ち、誰も状態を「所有」しないようなものではありませんか?) 。

もう1つの典型的な問題は、単体テストです。各単一モジュールを個別に単体テストしたい場合、特定のモジュールは5つの構成オプションのうち1つしか必要としない場合があります。通常、個々のモジュール/オブジェクトをアプリケーションの残りの部分から切り離し、それでも1つまたは2つの必要なパラメーターを受け入れることができるようにするにはどうすればよいですか(単体テストフレームワークは何らかの方法で構成機能を呼び出したり引き継いだりしますか)?

私の推測では、これを行うための独自の正しい方法はありませんが、さまざまなアプローチやよく知られたパターンについて読むのは興味深いでしょう。

4

2 に答える 2

2

通常、次の方法で構成オプションを読み取りますか?-コマンドライン/GUIオプション-構成テキストファイル

両方。Djangoのsettings.pyとlogging.iniを使用します。また、最も頻繁に変更されるオプションには、コマンドラインオプションと引数を使用します。

複数のモジュール/オブジェクトがこれらのオプションにどのようにアクセスできますか?

  • settings.py; logging.ini-言うことはできません。
  • 私たちのオプションはメインプログラム専用であり、
    関数またはオブジェクト初期化子への引数を作成するために使用されます。

[optparseオプションを共有することは首の大きな痛みであり、不必要に多くのものをテスト不可能な混乱に結び付けます。]

単一のモジュール(「メイン」モジュールではない)の単体テストを行う場合:(入力ファイル名を指定する読み取りオプションなど)

[質問を解析できません。これは「オプションがある場合、どのようにテストしますか?」と思います。]

答えは-私たちはしません。mainメソッドのみがコマンドラインオプションを解析するため、他のモジュール、関数、またはクラスはコマンドラインオプションについて何も考えていません。このモジュールはありません「5つの構成オプションのうち1つが必要です」モジュールのクラス(または関数)には通常の引数があり、それだけです。

のみを使用しますoptparse

于 2009-06-19T20:23:47.517 に答える
0
"Counts answer"
Please update these counts and feel free to add/modify.

Do you usually read config options via:
- command-line/gui options : 1
- a config text file       : 0


How do multiple modules/objects have access to these options?
- they receive them from the caller as an argument: 1
- read them directly from the config text file:     0


When doing unit-testing of a single module (NOT the "main" module)
and the module uses one option, e.g. input filename:
- unit-test framework provides own "simplified" config functionality: 0
- unit-test framework invokes main app's config functionality:        1


Do you use:
- optparse:  1
- getopt:    0
- others?


Please list any config management "design pattern" 
(usable in Python) and add a count if you use it - thanks.
- 
-
于 2009-06-19T20:17:00.913 に答える