Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

カート追加処理の実装例 #2273

Closed
wants to merge 15 commits into from

Conversation

izayoi256
Copy link
Contributor

@izayoi256 izayoi256 commented Apr 15, 2017

概要(Overview・Refs Issue)

#2219 について自分でも手を動かしてみようと思い、商品詳細画面のカート追加部分のみ実験的に実装。

余力があれば開発を続けますが、通常業務もあるため完成まで漕ぎ着けられるかどうか不明。

どなたかが引き取って拡張するようならそれでも構いません。

方針(Policy)

  • 現状では商品規格IDが実質上のカートのIDとなっている。同じ商品規格でも異なるオプションなら別のカートとして追加したいケースに対応。

  • カートに追加する処理では、商品規格IDではなくCartItemエンティティを渡す。追加対象のCartItemとカート内のCartItemを比較する判定を追加可能。

課題

  • 同じ商品規格が複数カートに入った際の、在庫や購入制限を考慮する必要がある。 対応済み

  • 削除時等に利用するカートのIDを、商品規格ID以外に変更する必要がある。2系のcart_noのような方式で、現在値をセッションに保持するのがいいと思われる。 対応済み

  • 単価計算についても、同様の実装で拡張可能だと好ましい。

  • OrderDetailやShipmentItemでも共通の処理を利用することを考慮すると、CartItem/OrderDetail/ShipmentItemにCartItemTrait的なものを設定した方がいいのでは。

実装に関する補足(Appendix)

  • 利用例 https://github.com/izayoi256/ec-cube/tree/issue/2219_option

    • CartItemにオプションフィールドを追加し、オプションの入力内容で比較する判定を実装してあります。

    • 商品詳細画面でカートに追加時、「オプション入力」の内容も考慮してカート追加処理が行なわれます。

    • ※ 実装してあるのはカート追加処理までで、削除等は未対応です。 フロント側は対応済み

テスト(Test)

  • 新規実装分は一通りテスト追加済み。

相談(Discussion)

nanasessさんの実装を真似てはいますが、恥ずかしながら初めてデザインパターンに触れるため、何か変な箇所があればご指摘下さい。

@t-nagahashi
Copy link
Contributor

以下issueの設計をベースに同様の実装をマージ済のため、クローズいたします。
#2613

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants