Skip to content
One of the domain model implementation of the movie ticket pricing for https://cinemacity.co.jp/ticket/
Rust
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.gitignore
Cargo.lock
Cargo.toml
README.md
rustfmt.toml

README.md

movie-ticket-domain-modeling

シネマシティの映画チケットの料金体系や制約のドメインモデル

https://cinemacity.co.jp/ticket/

実装した仕様

シネマシティのwebページから読み取れる料金仕様についてはすべて実装した(つもり)。 また、障がい者割引の同伴者や夫婦50割引などの、複数人の関係により発生する制約や料金変化についてもモデリングした。

  • 顧客区分ごと(一般、シネマシティズン、夫婦50、...)、時間区分(平日、土日祝、レイト、映画の日)からチケットの基本料金の導出
  • 映画属性による価格変化
    • 3D作品は一律プラス400円
    • 【極上爆音上映】はレイトショー割適用外
  • 顧客属性による割引
    • 3Dメガネ(Real D)持参の場合は、100円引き
  • 顧客がその区分のチケットを購入できるかのバリデーション
    • 例: 70才以上じゃないとシニアチケットは買えない
  • 夫婦50や障がい者の同伴など、複数人にまたがる制約や割引
  • 夫婦50割引は2019年3月31日まで
  • シネマシティズンは、平日なら「映画の日」に関係なく1,000円
    • 「映画の日の価格よりも通常価格が安い場合はそっちの値段を採用する」仕様に汎化
  • 特別興行
    • 任意の料金設定を用意できる

未実装

  • 単体テスト

モデリングの方針と考察

  • とあるn人(n≧1)の関係に対して、m枚のチケットが発行されるようなモデルにする
    • 観客:チケットの制約関係や対応関係が常に1人:1枚で完結するとは限らないため、それをうまく扱えるようにモデルに落とし込む
    • 障がい者割引、夫婦50などは、同伴者に割引があったり、同伴者との関係に制約があったりする
    • 夫婦50に至っては2人で1枚のチケットっぽい、常に観客とチケットが1:1とは限らない
    • ほかにも今後ビジネス要件によっては、ペア用チケットや団体割など増える可能性も充分ある
  • このモデルでは、チケット購入者の属性(職業、エムアイカード有無、駐車場利用有無など)や、購入者の属性が購入条件を満たしているかのバリデーションについても取り扱っている
    • しかし、本来ここらへんのバリデーションはシステムとして扱う必要なさそう、当日映画館の店員が目視で確認するほうが現実的
      • たとえば一緒に行く人の分も含めてチケットをn枚買うとき、料金に影響しうるすべてのステータスをn人全員分入力するのは厳しい気がする
    • 駐車場割引、エムアイカード割引、夫婦割引などの妥当性チェックのバリデーションをシステム上で行うのは現実的ではない
  • やってない(やらない)こと
    • 最適(最安)なチケットの組み合わせの算出
      • 基本的にはユーザーが注文時に選べば十分
      • 前述したように、チケット購入者の属性についてまでシステムで扱うのは現実的ではないため、チケット組み合わせの最適化についても同様
      • 一応やろうと思えば、複数人の観客情報をinputとして最適なチケットの組み合わせを見つけるサービスの追加も可能ではある
        • 複数人の場合は誰と誰がどの関係としてチケットを買うかについての組み合わせについても考慮する必要があり、アルゴリズムは結構ややこしそう
You can’t perform that action at this time.