2016-09-29 10 views
0

現在、私たちは大きなプロジェクトに取り組んでいます。多くの顧客固有の例外を含むPythonのデザインパターン

このプロジェクトは、EDIFACTメッセージを作成することになっています。これは最初は難しいことではありませんが、標準の独自の実装を持つ多くの顧客がいるということです。我々はいくつかのEDIFACT標準に取り組んでいるその上で

(私たちの場合はD96A及びD01B。)

一部の顧客の例外は発散フィールドの長さを有する限り小さくするかもしれませんが、いくつかは完全に独自の実装を行っています異なる。

この瞬間、私たちは、リスト内の顧客の例外を列挙されている(ただ、一貫性のあるそれらを維持するため)とのコードで、私たちのようなものを使用します。これはうまく動作しますシンプルな例外のカップルのため

if NAME_LENGTH_IS_100 in customer_exceptions: 
    this.max_length = 100 
else: 
    this.max_length = 70 

を、しかし、現時点ではコードが複雑になってきており、コードをリファクタリングすることを考えています。

私はある種の工場パターンについて考えていますが、実装についてはわかりません。 別のオプションは、基本パッケージを作成し、標準から逸脱しているすべての顧客に対して別々の実装を作成することです。

私は誰かが助けを借りて私を助けることを願っています。

ありがとうございます。

答えて

0

これをリソースファイルにデフォルトで設定し、各例外ハンドルを高い値に設定すると、適切なクライアントの正しいキーを読み取るだけで、きれいになります。

1

私はあなたの質問が適切に答えるには広すぎると思っています(私はこのためにクローズボタンをクリックしていましたが、そうでなければ決断しました)。この理由は次のとおりです。

提供したコードスニペットは何も間違っていません。それは初期化ルーチンのいくつかの種類の一部でなければなりません、そして、これはちょうど良い方法です。このようなことを大量にすることも傷つけません。

しかし、より複雑なケースを処理するには、ケース自体に大きく依存します。

  • 多くの場合、お客様の特別な選択肢を表す変数があれば十分です。
  • 私は、それぞれの顧客のためにサブクラスを持つCustomerベースクラスを持つことを提案したいと思います(または顧客も階層的にグループ化することもできますし、素晴らしい継承ツリーに反映させることもできます)。
  • もう一度、メソッド、関数、クラスの振る舞いを微調整するために、Pythonデコレータを使ってアスペクト指向プログラミングを提案します。

これは具体的な用途に大きく左右されるため、これ以上具体的には答えられないと思います。

関連する問題