0

いくつかのユーザー設定を使用して開始できるアプリケーションがあります。そのためにConfigParser、組み込みパッケージのクラスを使用しますConfigParser。それぞれのセクション、サブセクション、およびオプションを毎回指定することなく、いくつかの設定項目を取得/設定するために、 andメソッドConfigParserを実装する のサブクラスを派生させました。__getitem____setitem__

これらの設定 (作業ディレクトリ、ログ レベルなど) の一部は私のコードにとって非常に適切であるため、項目の 1 つが変更されるたびにそれらを確認したいと思います。そのために、私は現在、次の 2 つのアプローチを考えています。

  1. 私の好みの項目の1つが変更されるたびに、すべての項目をチェックするメソッドを作成します。非常に単純ですが、1 つの項目が変更されるたびに設定全体がチェックされるため、あまり効率的ではありません。

  2. 各設定項目 (check_logger、check_working_directory、check_blabla ...) の check_item メソッドを記述し、項目が設定されるたびに、対応するチェッカーが次を使用して呼び出されますgetattr(self,'check_%s' % item)(item)

私は、2 番目のアプローチが最初のアプローチよりも優れていると考える傾向があります。

これらのデザインに代わるものはありますか?

どうもありがとうございます

エリック

4

1 に答える 1

1

ルールの複雑さ (および作成者/作成者) に応じて、次のいずれかを実行できます。

  • それらを純粋な Python として実装します。
  • BPEL のような (ビジネス) ルール言語を使用します。Python はPyPELプロジェクトでこれをサポートしています。
  • 制約ベースのシステムを使用して、一連の値が直接的または間接的にルールに違反していないことを確認します。たとえば、 python-constraintを見ることができます。これは一種の「ソルバー」ですが、一連の「設定」が指定された場合に解決策がない場合は通知されます。

単純なものから適度に複雑なものまで、最初の選択が私の好みです。ただし、コメントで説明したように、最も単純なケースを除いて、「一度に1つの項目をチェックする」アプローチが有効であるとは思わないことに注意してください。これは、1 つ以上の他の項目の値に応じて、一部の項目の値が有効である場合と有効でない場合があるためです。また、値の変更が間接的に違反する可能性があるルールを追跡するのはそれほど簡単ではありません。

于 2013-06-23T08:35:50.807 に答える