SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
EC-CUBE東京ユーザグループ勉強会
2019/02/07
chihiro-adachi (足立 智広)
株式会社イーシーキューブ
- @chihiro-adachi
- EC-CUBEエバンジェリスト
アジェンダ
● 導入
○ 今日のゴール
○ PurchaseFlowとは
● カスタマイズ例(デモ)
● PurchaseFlowの仕組み
● カスタマイズ例の解説
● まとめ
今日のゴール
● PurchaseFlowの仕組みがわかる
● Processorのカスタマイズができるようになる
PurchaseFlowとは
● 受注の集計処理や整合性チェック・受注明細の操作を拡
張できる仕組み
● たとえば...
○ 値引きの計算を行う
○ 送料計算を行う
○ 合計金額を集計する
○ 在庫切れ商品のチェックを行う
PurchaseFlowとは
● 集計処理や、在庫チェックなどのバリデーションは、受注に関わる共通したロ
ジック
● 従来は、利用される画面で個別に実装されており、カスタマイズ時の影響が
読みづらい、再利用しにくいなどの課題があった
● 集計フローを制御するPurchaseFlowと、各処理を行うProcessorに分離し、ロ
ジックを差し替えたり、新たなバリデーションを追加したりなど拡張できるよう
に対応
https://github.com/EC-CUBE/ec-cube/pull/2424
カスタマイズ例(デモ)
カスタマイズ例(デモ)
● 「10,000円以上の購入で500円の値引き」を作る
● 作成するファイルは一つだけ
○ app/Customize/Service/PurchaseFlow/Processor/NebikiProcessor.
php
● ソースコード
○ https://github.com/chihiro-adachi/ec-cube/tree/demo-tokyo
○ https://github.com/chihiro-adachi/ec-cube/compare/ad03d2d0078f8
347c0a8fae9acc1ced74bf6e967...demo-tokyo
PurchaseFlowの仕組み
PurchaseFlowとProcessor
● PurchaseFlow
○ 明細処理や集計処理の全体のフローを制御する
Processorを順次実行していく
● Processor
○ 受注や明細に対するバリデーションや操作を行う
○ たとえば
■ 値引き明細を追加する
■ 販売制限数のチェックを行う
○ 実行タイミングはアノテーションや実装するインター
フェースで指定する(後述)
PurchaseFlowの流れ
①受注明細のバリデーション
②受注のバリデーション
金額集計
③受注の操作
④値引き明細の操作
⑤金額確定後の操作・バリデー
ション
金額集計
金額集計
金額集計
※PurchaseFlow::validate()の処理
金額集計
2系・3系の購入処理の流れ
https://github.com/EC-CUBE/ec-cube/pull/2424
PurchaseFlowの流れ
概要 具体例(一部抜粋) 実装するインターフェース
明細のバリデーション 商品価格の変更チェック
商品の公開ステータスチェック
ItemValidator
受注のバリデーション 在庫チェック
販売制限数のチェック
ItemHolderValidator
受注の操作 注文番号の払い出し
送料の明細の追加
送料無料条件の適用
支払い手数料の明細の追加
ItemHolderPreprocessor
値引き明細の操作 ポイント値引明細の追加 DiscountProcessor
金額確定後の操作・バリデーション 合計金額のマイナスチェック ItemHolderPostValidator
3種類のフロー
● CartFlow
○ カート画面、カートブロックで実行される
● ShoppingFlow
○ 購入確認画面、完了画面で実行される
● OrderFlow
○ 管理画面の受注登録画面で実行される
カスタマイズ例の解説
(ソースコード見ながら)
まとめ
覚えるのは3つだけ
● PurchaseFlowは集計や明細処理のフロー全体を制御し、
Processorを実行していく
● Processorはバリデーションや明細の操作をする
● Processorをどのタイミングで実行するかは、アノテーショ
ンや実装するインターフェースで指定
Thanks
#eccube

Weitere ähnliche Inhalte

Was ist angesagt?

Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Preferred Networks
 
小さなサービスも契約する時代
小さなサービスも契約する時代小さなサービスも契約する時代
小さなサービスも契約する時代Ryo Mitoma
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話Kentaro Yoshida
 
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜Shougo
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - 健人 井関
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Publicbonjin6770 Kurosawa
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
問いかけの作法輪読会#2(ファクトリー型/ワークショップ型)
問いかけの作法輪読会#2(ファクトリー型/ワークショップ型)問いかけの作法輪読会#2(ファクトリー型/ワークショップ型)
問いかけの作法輪読会#2(ファクトリー型/ワークショップ型)瑛一 西口
 
(DL hacks輪読) Variational Dropout and the Local Reparameterization Trick
(DL hacks輪読) Variational Dropout and the Local Reparameterization Trick(DL hacks輪読) Variational Dropout and the Local Reparameterization Trick
(DL hacks輪読) Variational Dropout and the Local Reparameterization TrickMasahiro Suzuki
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方Yoshifumi Kawai
 

Was ist angesagt? (20)

Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
 
小さなサービスも契約する時代
小さなサービスも契約する時代小さなサービスも契約する時代
小さなサービスも契約する時代
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
問いかけの作法輪読会#2(ファクトリー型/ワークショップ型)
問いかけの作法輪読会#2(ファクトリー型/ワークショップ型)問いかけの作法輪読会#2(ファクトリー型/ワークショップ型)
問いかけの作法輪読会#2(ファクトリー型/ワークショップ型)
 
FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
 
(DL hacks輪読) Variational Dropout and the Local Reparameterization Trick
(DL hacks輪読) Variational Dropout and the Local Reparameterization Trick(DL hacks輪読) Variational Dropout and the Local Reparameterization Trick
(DL hacks輪読) Variational Dropout and the Local Reparameterization Trick
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 

Ähnlich wie 2019/2/7 EC-CUBE東京UG勉強会-PurchaseFlowの使い方-

Pivotal Trackerでアジャイルなプロジェクト管理
Pivotal Trackerでアジャイルなプロジェクト管理Pivotal Trackerでアジャイルなプロジェクト管理
Pivotal Trackerでアジャイルなプロジェクト管理You&I
 
仮想化専門コンサルタントが教える「成功する仮想化導入のポイント」
仮想化専門コンサルタントが教える「成功する仮想化導入のポイント」仮想化専門コンサルタントが教える「成功する仮想化導入のポイント」
仮想化専門コンサルタントが教える「成功する仮想化導入のポイント」VirtualTech Japan Inc.
 
JPiere 伝票の基礎知識
JPiere 伝票の基礎知識JPiere 伝票の基礎知識
JPiere 伝票の基礎知識Hideaki Hagiwara
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事Cybozu, Inc.
 
ログにまつわるエトセトラ
ログにまつわるエトセトラログにまつわるエトセトラ
ログにまつわるエトセトラ菊池 佑太
 
SubversionとSugarsync
SubversionとSugarsyncSubversionとSugarsync
SubversionとSugarsyncHidenori Goto
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本Tsuyoshi Yumoto
 
プロジェクトマネジメント入門以前 Web
プロジェクトマネジメント入門以前 Webプロジェクトマネジメント入門以前 Web
プロジェクトマネジメント入門以前 Webminamo
 
GC_Naiseika_Day_q3_0706_Keynote.pdf
GC_Naiseika_Day_q3_0706_Keynote.pdfGC_Naiseika_Day_q3_0706_Keynote.pdf
GC_Naiseika_Day_q3_0706_Keynote.pdfssuser41f27b
 

Ähnlich wie 2019/2/7 EC-CUBE東京UG勉強会-PurchaseFlowの使い方- (10)

Pivotal Trackerでアジャイルなプロジェクト管理
Pivotal Trackerでアジャイルなプロジェクト管理Pivotal Trackerでアジャイルなプロジェクト管理
Pivotal Trackerでアジャイルなプロジェクト管理
 
仮想化専門コンサルタントが教える「成功する仮想化導入のポイント」
仮想化専門コンサルタントが教える「成功する仮想化導入のポイント」仮想化専門コンサルタントが教える「成功する仮想化導入のポイント」
仮想化専門コンサルタントが教える「成功する仮想化導入のポイント」
 
JPiere 伝票の基礎知識
JPiere 伝票の基礎知識JPiere 伝票の基礎知識
JPiere 伝票の基礎知識
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事
 
ログにまつわるエトセトラ
ログにまつわるエトセトラログにまつわるエトセトラ
ログにまつわるエトセトラ
 
SubversionとSugarsync
SubversionとSugarsyncSubversionとSugarsync
SubversionとSugarsync
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本
 
プロジェクトマネジメント入門以前 Web
プロジェクトマネジメント入門以前 Webプロジェクトマネジメント入門以前 Web
プロジェクトマネジメント入門以前 Web
 
TopSE.20121119
TopSE.20121119TopSE.20121119
TopSE.20121119
 
GC_Naiseika_Day_q3_0706_Keynote.pdf
GC_Naiseika_Day_q3_0706_Keynote.pdfGC_Naiseika_Day_q3_0706_Keynote.pdf
GC_Naiseika_Day_q3_0706_Keynote.pdf
 

2019/2/7 EC-CUBE東京UG勉強会-PurchaseFlowの使い方-