スーパークラスTransaction
には、TransactionA
とTransactionB
の2つのサブクラスがあります。 Transaction
は、特定のキー(ファイル、人物など)に間に合うように発生する複数のイベントで構成されます。イベントによっては、一部のトランザクションを破棄する必要があります。
ファイル「キー」の具体例は次のようになります。
TransactionA
は、ファイルが読み取られている間の一連のファイルイベントを表します。TransactionRead
と呼びましょうTransactionB
は、書き込まれるファイルのファイルイベントのセットで、TransactionWrite
と呼ばれます同じファイルをいつでも読み書きできます。
イベントリストは次のようになります(非常に簡略化されています)。
ステップ1と2では、トランザクションはまだ不明であり、情報(タイムスタンプ、ファイル名、ユーザー名など)が必要ですが、TransactionRead
かTransactionWrite
かはまだわかりません。
私の合理的な方法は、イベントとメソッドを分析するのに十分なサービスを保持するTransaction
クラスを作成することですwho_i_am
パターンが適合する場合はREAD
またはWRITE
を返します(例:オープン->読み取り-> EOF)、パターンが見つからない場合はNone
。
いつかトランザクションタイプがわかるようになり、Transaction
をTransactionRead
に変換するための良いアプローチになると思います。 Python atmでコーディングしていますが、このような概念を聞いたことがありません。悪いのはなぜですか?言語は継承を遅らせるためのツールを提供していますか?
ありがとう
Transaction
(継承);いくつかの既知の設計パターンが役立ちます。あなたの場合、私は非常によく想像できました:
Transaction
はTransactionUndetermined
状態で始まり、次にTransactionRead
またはTransactionWrite
状態のいずれかを取得し、最後にTransactionClosed
状態を取得します、発生したイベントに応じて。公開されるインターフェースはすべての状態で同じですが、動作は動的に変化する可能性があります。TransactionRead
およびTransactionWrite
デコレータは、Transaction
に追加の責任/動作/プロパティを追加できます。トランザクションを使用するコンテキストでは、元のオブジェクトの代わりにデコレータを使用する必要があります。すべてのデコレータは同じ基本動作(たとえば、元のオブジェクトへの関数呼び出しの転送)を実装しますが、各デコレータは追加された責任のために独自のインターフェースを公開できます。