0

私はこれに間違ったアプローチをしているように感じますが、最善の方法はわかりません。

(約 100 人の受信者のリストから) 誰が受信するかに基づいて、データを異なる方法で処理する必要があります。各受信者には、実行する必要がある多くの固有の処理があります。たとえば、宛先ごとに読みやすいデータを出力したり、宛先ごとに固有のリンクを生成したりできる必要があります。

私が最初に考えたのは、継承を使用して受信者の種類ごとに処理関数をクラスにカプセル化することです。これはきれいでpythonicだと思います。

ただし、場合によっては処理を別の方法で行う必要があり、これをコードベースの外部で制御する必要があります。たとえば、ある受信者のリンク生成をオフにする必要がある場合があります。私の考えは、各受信者を行として、現在のフラグを列として、サイトの DB にテーブルを作成することでした。

問題は、処理クラスを情報の行にどのように対応させるかです。クラス名を SQL 列にダンプするという考えは好きではありません。

英語は私の母国語ではないため、これが不明確な場合は申し訳ありません。

4

1 に答える 1

0

ええと、あなたが「私はこれに近づいている」と言っているとき、私はあなたが正しいと思います。

また、フラグについてはあなたが正しいと思います。フラグは何らかの形でユーザーとともに保存する必要があります(多くのユーザーが同様の構成を共有している場合は外部キーを介して、フラグの値が完全に異なる場合は1対1の関係さえあります)。

ただし、個別のフラグ セットに対して個別のクラスを用意する必要はありません。そのような単一のクラスを使用してそれを定義できます:

class UserReport(object):
    def __init__(self, flags):
        self._flags = flags

    def prepare(self):
        if self._flags.get('generate_links'):
            self.generate_links()
        self.build_content()

    def send(self):
        if self._flags.get('send_report'):
            # ... send report here ...
            return True
        else:
            return False

これは非常に大まかな例ですが、インスタンス化中 (またはそれ以降) にいくつかのパラメーター (フラグ) を受け取ることを許可するだけで、1 つのクラスで複数の異なるケースを処理する方法を示す必要があります。

于 2013-07-12T02:14:55.367 に答える