2

シナリオ

Combo有名なタコス店が、モデル、ComboItemIngredient、およびを使用して Django アプリを構築したいと考えていOrderます。

  1. 本社は、同梱アイテムでさまざまなコンボを作成し、元のアイテムの成分と価格をレイアウトしたいと考えています。
  2. その後、各フランチャイズは、メニューで販売するコンボを選択でき、ストアのコンボアイテムの価格と材料を調整できます.
  3. 注文が入ると、コンボとアイテムの詳細がログに表示され、HQがコンボの名前を変更したり、フランチャイズが価格/成分を変更したりしても、将来変更されるべきではありません.

使用事例

  1. HQは「ホットタココンボ」を作成します。関連する 3 つのコンボ アイテムがあります。

    • タコス (価格: 99 ドル、材料: シェル、ビーフ、チーズ、ホットソース)
    • チュロススパイラル (価格: $.79)
    • ドリンク (価格: $1.29)
  2. ニューヨークのフランチャイズは、メニューにホット タコス コンボを追加します。タコスの価格を $1.49 に調整し、タコスにレタスを追加します。

  3. 顧客は、タコスにチーズをのせずにコンボを注文します。

  4. HQ はコンボの名前を Fiery Taco Combo に変更します - NY のコンボ名は更新されますが、タコスは同じカスタム価格のままで、まだレタスが含まれています。

  5. NY フランチャイズのマネージャーがすべての注文を確認し、Hot Taco Comboの 1 つの注文を確認します。タコスの材料はシェル、肉、レタスのみです。

問題

Comboaは基本的に 3 つのレベルすべてで同じオブジェクトですが、関連するオブジェクトは異なる可能性があるため、これを処理する最善の方法を決定するのに苦労していComboItemます。HQ は、名前などのコンボ属性を更新できる必要があり、すべてのフランチャイズ コンボ名を更新しますが、コンボ アイテムのカスタマイズはそのままにしておく必要があります。さらに、正確な注文記録のために、販売時点でのコンボの詳細とカスタマイズは、一度記録すると決して変更されるべきではありません。

AbstractBaseClass本来は、関連するモデルやオブジェクトをそれぞれのビジネスレベルで継承する for eachを考えていたのですが、その構造は冗長で保守が難しいと感じました。

次にGenericForeignKey、コンボを HQ、フランチャイズ、またはオーダーのいずれかに関連付け、必要に応じてオブジェクトを複製して、レベルを下げようと考えました。これは奇妙でエラーが発生しやすいと感じます。

誰かがこのようなケースに対処したことがありますか、または何か推奨事項はありますか? それは複雑な問題であり、複雑な解決策が必要なだけの問題ですか、それとも私が見逃している単純なアプローチがありますか? 前もって感謝します。

4

1 に答える 1