Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
EC-CUBE
PPTX, PDF
870 views
201703 EC-CUBE 3.1開発方針説明会:機能カスタマイズ編 02_機能カスタマイズのためのアーキテクチャ
201703 EC-CUBE 3.1開発方針説明会:機能カスタマイズ編 02_機能カスタマイズのためのアーキテクチャ
Software
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 28
2
/ 28
3
/ 28
4
/ 28
5
/ 28
6
/ 28
7
/ 28
8
/ 28
9
/ 28
10
/ 28
11
/ 28
12
/ 28
13
/ 28
14
/ 28
15
/ 28
16
/ 28
17
/ 28
18
/ 28
19
/ 28
20
/ 28
21
/ 28
22
/ 28
23
/ 28
24
/ 28
25
/ 28
26
/ 28
27
/ 28
28
/ 28
More Related Content
PPTX
201703 EC-CUBE 3.1開発方針説明会:機能カスタマイズ編 01_全体方針
by
EC-CUBE
PPTX
Mapas mentales
by
Miriam Chino
PDF
2016 07-16 PHPカンファレンス関西2016(EC-CUBE)
by
EC-CUBE
PDF
01. cuestionario de romanos introducción y cap. 1
by
Yosef Sanchez
PDF
How to Become a Thought Leader in Your Niche
by
Leslie Samuel
PDF
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
by
Amazon Web Services Japan
PPTX
AWSで始めるサーバレスな RESTful API システム
by
Masayuki Kato
PPTX
How to Stress Less
by
Maureen Wielansky
201703 EC-CUBE 3.1開発方針説明会:機能カスタマイズ編 01_全体方針
by
EC-CUBE
Mapas mentales
by
Miriam Chino
2016 07-16 PHPカンファレンス関西2016(EC-CUBE)
by
EC-CUBE
01. cuestionario de romanos introducción y cap. 1
by
Yosef Sanchez
How to Become a Thought Leader in Your Niche
by
Leslie Samuel
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
by
Amazon Web Services Japan
AWSで始めるサーバレスな RESTful API システム
by
Masayuki Kato
How to Stress Less
by
Maureen Wielansky
Viewers also liked
PPTX
Cómo acreditar los derechos de autor
by
Roger Girón
PDF
ソーシャルメディアで顧客と交流すればファンは増えるのか?
by
新潟コンサルタント横田秀珠
PDF
知っておきたい「Adobeソフトを選び、使いこなすポイント」
by
Mori Kazue
PDF
Photoshop & illustrator はここがスゴイ!
by
Mori Kazue
DOCX
Environmental impact assessment
by
endw
PDF
Evolutionär webbdesign - Webbdagarna Stockholm 2016
by
Conversionista
PDF
Cas usages metiers_letsignit-
by
Anne-Sophie Germain
Cómo acreditar los derechos de autor
by
Roger Girón
ソーシャルメディアで顧客と交流すればファンは増えるのか?
by
新潟コンサルタント横田秀珠
知っておきたい「Adobeソフトを選び、使いこなすポイント」
by
Mori Kazue
Photoshop & illustrator はここがスゴイ!
by
Mori Kazue
Environmental impact assessment
by
endw
Evolutionär webbdesign - Webbdagarna Stockholm 2016
by
Conversionista
Cas usages metiers_letsignit-
by
Anne-Sophie Germain
Similar to 201703 EC-CUBE 3.1開発方針説明会:機能カスタマイズ編 02_機能カスタマイズのためのアーキテクチャ
PPTX
201706 EC-CUBE 3.1開発進捗説明会:デザインカスタマイズ&新機能編 01_全体方針
by
EC-CUBE
PPTX
201710_EC-CUBE 開発進捗説明会:開発背景・今後のスケジュール
by
EC-CUBE
PPT
EC-CUBEの設計思想について
by
Kentaro Ohkouchi
PDF
Ec cube開発合宿 プラグインセミナー
by
Ayumu Kawaguchi
PDF
EC-CUBEユーザカンファレンス2016
by
Chihiro Adachi
PPTX
EC-CUBE3プラグイン仕様
by
Shinichi Takahashi
KEY
EC-CUBEプラグイン講義
by
ria1201
PPTX
201710_EC-CUBE 開発進捗説明会:Customize・Pluginライブコーディン
by
EC-CUBE
PPTX
concrete5×ec cube(武氏)スライドシェア用
by
株式会社システムフレンド
PDF
Magento 中忍試験 〜壁の高さを知る〜 Magento meet up Tokyo 1
by
Takahiro Hisasue
PPTX
201706 EC-CUBE 3.1開発進捗説明会:デザインカスタマイズ&新機能編 04_機能改善
by
EC-CUBE
KEY
EC-CUBE + PHPUnit で 実践テスト駆動開発
by
Kentaro Ohkouchi
PDF
202101 EC-CUBE 4.1 開発進捗説明会
by
EC-CUBE
PDF
120512 phpカンファレンス用資料
by
Hiroaki Yoshimoto
PPTX
Xoopsec
by
Yoshi Sakai
PDF
201803_EC-CUBE開発進捗説明会_1_3.n概要説明
by
EC-CUBE
PPTX
EC-CUBEプラグイン制作のポイント
by
Takami Kazuya
PPTX
201706 EC-CUBE 3.1開発進捗説明会:デザインカスタマイズ&新機能編 02_デザインカスタマイズ
by
EC-CUBE
PPTX
Symfonyコンポーネントで生まれ変わるEC-CUBE
by
Shinichi Takahashi
PDF
Using Ext Direct with SenchaTouch2
by
久司 中村
201706 EC-CUBE 3.1開発進捗説明会:デザインカスタマイズ&新機能編 01_全体方針
by
EC-CUBE
201710_EC-CUBE 開発進捗説明会:開発背景・今後のスケジュール
by
EC-CUBE
EC-CUBEの設計思想について
by
Kentaro Ohkouchi
Ec cube開発合宿 プラグインセミナー
by
Ayumu Kawaguchi
EC-CUBEユーザカンファレンス2016
by
Chihiro Adachi
EC-CUBE3プラグイン仕様
by
Shinichi Takahashi
EC-CUBEプラグイン講義
by
ria1201
201710_EC-CUBE 開発進捗説明会:Customize・Pluginライブコーディン
by
EC-CUBE
concrete5×ec cube(武氏)スライドシェア用
by
株式会社システムフレンド
Magento 中忍試験 〜壁の高さを知る〜 Magento meet up Tokyo 1
by
Takahiro Hisasue
201706 EC-CUBE 3.1開発進捗説明会:デザインカスタマイズ&新機能編 04_機能改善
by
EC-CUBE
EC-CUBE + PHPUnit で 実践テスト駆動開発
by
Kentaro Ohkouchi
202101 EC-CUBE 4.1 開発進捗説明会
by
EC-CUBE
120512 phpカンファレンス用資料
by
Hiroaki Yoshimoto
Xoopsec
by
Yoshi Sakai
201803_EC-CUBE開発進捗説明会_1_3.n概要説明
by
EC-CUBE
EC-CUBEプラグイン制作のポイント
by
Takami Kazuya
201706 EC-CUBE 3.1開発進捗説明会:デザインカスタマイズ&新機能編 02_デザインカスタマイズ
by
EC-CUBE
Symfonyコンポーネントで生まれ変わるEC-CUBE
by
Shinichi Takahashi
Using Ext Direct with SenchaTouch2
by
久司 中村
More from EC-CUBE
PDF
2020_EC-CUBEパートナー新年会発表資料
by
EC-CUBE
PDF
201809_EC-CUBE4.0概要説明
by
EC-CUBE
PDF
201803_EC-CUBE開発進捗説明会_6_多言語化
by
EC-CUBE
PDF
201803_EC-CUBE開発進捗説明会_5_管理画面UI改善
by
EC-CUBE
PDF
201803_EC-CUBE開発進捗説明会_4_カスタマイズデモ
by
EC-CUBE
PDF
201803_EC-CUBE開発進捗説明会_3_カスタマイズ
by
EC-CUBE
PDF
201803_EC-CUBE開発進捗説明会_2_フレームワーク変更
by
EC-CUBE
PPTX
20171117 最新機能紹介
by
EC-CUBE
PDF
20171122_VAddyMeetUp_EC-CUBEでのVAddy活用事例
by
EC-CUBE
PPTX
201710_EC-CUBE 開発進捗説明会:拡張APIダイジェスト
by
EC-CUBE
PPTX
201710_EC-CUBE 開発進捗説明会:管理画面UI改善
by
EC-CUBE
2020_EC-CUBEパートナー新年会発表資料
by
EC-CUBE
201809_EC-CUBE4.0概要説明
by
EC-CUBE
201803_EC-CUBE開発進捗説明会_6_多言語化
by
EC-CUBE
201803_EC-CUBE開発進捗説明会_5_管理画面UI改善
by
EC-CUBE
201803_EC-CUBE開発進捗説明会_4_カスタマイズデモ
by
EC-CUBE
201803_EC-CUBE開発進捗説明会_3_カスタマイズ
by
EC-CUBE
201803_EC-CUBE開発進捗説明会_2_フレームワーク変更
by
EC-CUBE
20171117 最新機能紹介
by
EC-CUBE
20171122_VAddyMeetUp_EC-CUBEでのVAddy活用事例
by
EC-CUBE
201710_EC-CUBE 開発進捗説明会:拡張APIダイジェスト
by
EC-CUBE
201710_EC-CUBE 開発進捗説明会:管理画面UI改善
by
EC-CUBE
201703 EC-CUBE 3.1開発方針説明会:機能カスタマイズ編 02_機能カスタマイズのためのアーキテクチャ
1.
EC-CUBE 3.1 開発方針説明 機能カスタマイズ編機能カスタマイズのためのアーキテクチャ
2.
概要 #1985 で、 v3.1
に向けた実験的な実装を行っています。詳細は主に ShoppingControllerのソースコメントに記載しています。 • forward(Sub Request) を使用して、 Controller の処理を抽象化。継承 を使用せず、処理をオーバーライドできるようにした。 • Order 関連の FormType の抽象化 • 単価集計を CalculateService にまとめて、 Strategy パターンを適用 • 支払を PaymentService にまとめて、 Adapter パターンを適用
3.
概要 その他、以下アーキテクチャの変更をしています。 • Symfony3.2 • v3.1
では Symfony3.4 LTS を採用予定 • Silex2.0 • Pimple3.0 • Doctrine2.5 • SensioFrameworkExtraBundle • Inheritance Mapping
4.
カスタマイズ方法の改善 • アノテーションの採用 • forward(Sub
Request) の使用 • Inheritance Mappingの採用 • 単価集計や支払いなどの処理にデザインパターンを適用 • プラグインを使用しないカスタマイズ
5.
アノテーションの採用 •新たに、 Doctrine アノテーション、
SensioFrameworkExtraBundle アノ テーションが使用できるようになりました。 •Entity の定義や、 コントローラのルーティング設定をアノテーションで 記述できるようになり、より簡易に拡張が可能になりました。 ※現在、既存のエンティティや、ルーティングは従来の Yaml や PHP での定義となっていますが、 将来的にはすべてアノテーションに置き換えられる予定です。
6.
サポートされているアノテーション •Doctrineアノテーション •SensioFrameworkExtraBundleアノテーション
7.
サポートされているアノテーション Doctrine アノテーション http://docs.doctrine-project.org/projects/doctrine- orm/en/latest/reference/annotations-reference.html @Column, @Entity,
@GeneratedValue, @Index, @Id, @InheritanceType, @JoinColumn, @JoinColumns, @JoinTable, @ManyToOne, @ManyToMany, @MappedSuperclass, @OneToOne, @OneToMany, @OrderBy, @SequenceGenerator, @Table, @UniqueConstraint...
8.
サポートされているアノテーション SensioFrameworkExtraBundle アノテーション http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index .html • @Route
及び @Method • @Template • @Security
9.
forward(Sub Request) の使用 従来、本体に手を入れずに、コントローラの処理を拡張する場合は、主に 以下のような方法がありました。 •
継承して別のインスタンスへ置き変える • イベントハンドラで頑張る これらの方法は、プラグインとコントローラの結合度が強くなり、開発効 率を下げる要因となっていました。 今回、カテゴリなどのブロックの処理に使用している Sub Request を流用 し、コントローラ内の処理を簡便に、他のコントローラへ移譲できるよう になりました。
10.
forward(Sub Request) の使用 ApplicationTrait::forward($path,
$requestParameters)というメソッドが追加 されており、 $path で指定したコントローラへ処理を移譲することができ ます。 このメソッドは、Response を返します。 コントローラ内で、この Response を return すると、レスポンスが出力さ れます。 return しなければ、内部の処理のみ実行されます。 コントローラのメソッドは、ルーティングを介して、緩く結合しているイ メージです。
11.
forward(Sub Request) の使用 例として、
ShoppingController::index() メソッドは以下のような実装になっ ています。
12.
src/Eccube/Controller/ShoppingController.php /** * 購入画面表示 * * @Route("/",
name="shopping") * @Template("Shopping/index.twig") */ public function index(Application $app, Request $request) { // カートチェック $response = $app->forward($app->path("shopping/checkToCart")); if ($response->isRedirection() || $response->getContent()) { return $response; } // 受注情報を初期化 $response = $app->forward($app->path("shopping/initializeOrder")); if ($response->isRedirection() || $response->getContent()) { return $response; } // 単価集計し, フォームを生成する $app->forwardChain($app->path("shopping/calculateOrder")) ->forwardChain($app->path("shopping/createForm"));
13.
src/Eccube/Controller/ShoppingController.php // 受注のマイナスチェック $response =
$app->forward( $app->path("shopping/checkToMinusPrice")); if ($response->isRedirection() || $response->getContent()) { return $response; } // 複数配送の場合、エラーメッセージを一度だけ表示 $app->forward($app->path("shopping/handleMultipleErrors")); $Order = $app['request_scope']->get('Order'); $form = $app['request_scope']->get(OrderType::class); return [ 'form' => $form->createView(), 'Order' => $Order ]; }
14.
forward(Sub Request) の使用 例えば、カートチェックの振舞いを変更したい場合は、 shopping/checkToCart
のルーティングをオーバーライドしたメソッドを作 成します。この処理は、 app/Acme/Controller 以下や、プラグインなどで拡 張できます。
15.
app/Acme/Controller/ExampleController.php /** * @Route("/shopping") */ class ExampleController { /** *
カート画面のチェック * * @Route("/checkToCart", name="shopping/checkToCart") */ public function checkToCart(Application $app, Request $request) { $cartService = $app['eccube.service.cart']; // カートチェック if (!$cartService->isLocked()) { log_info('カートが存在しません'); // カートが存在しない、カートがロックされていない時はエラー return $app->redirect($app->url('cart')); }
16.
app/Acme/Controller/ExampleController.php // 独自の処理を記述 log_info('カートの内容をチェックしました'); // 各コントローラ間の値の受け渡しには
$app['request_scope'] を使用可能 $Order = $app['request_scope']->get('Order'); if ($Order) { $Order->setNote('独自カスタマイズ処理を通過しました'); $app['orm.em']->flush($Order); } return new Response(); } }
17.
forward(Sub Request) の使用 forwardChain
を使用することで、複数の forward を連続してつなげること も可能です。 forward を活用することにより、各ルーティングの処理をコンパクトにまと めることができます。 依存するクラスも少ないため、簡単にテストを記述することが可能です。
18.
ExampleTest public function testCheckToCart() { $Controller
= new ¥Eccube¥Controller¥ShoppingController(); $this->assertInstanceOf('¥Eccube¥Controller¥ShoppingController', $Controller); $Request = Request::create($this->app->path('shopping/checkToCart'), 'GET'); $Response = $Controller->checkToCart($this->app, $Request); $this->assertInstanceOf('¥Symfony¥Component¥HttpFoundation¥RedirectResponse', $Response); $this->assertTrue($Response->isRedirect($this->app->url('cart')), $this->app->url('cart').'へリダイレクト'); }
19.
ExampleTest public function testCheckToCartIn() { $Controller
= new ¥Eccube¥Controller¥ShoppingController(); // カートに商品を投入 $cartService = $this->app['eccube.service.cart']; $cartService->addProduct(1); $cartService->lock(); $this->assertInstanceOf('¥Eccube¥Controller¥ShoppingController', $Controller); $Request = Request::create($this->app->path('shopping/checkToCart'), 'GET'); $Response = $Controller->checkToCart($this->app, $Request); $this->assertInstanceOf('¥Symfony¥Component¥HttpFoundation¥Response', $Response); $this->assertEmpty($Response->getContent(), '空のレスポンスを返却'); }
20.
Inheritance Mappingの採用 Inheritance Mapping http://docs.doctrine-project.org/projects/doctrine- orm/en/latest/reference/inheritance-mapping.html データベースのテーブルに新たなカラムを追加したい場合に
Inheritance Mapping を使用できるようになりました。 例えば、 商品(Product)に `ExampleField` という項目を追加したい場合は、 以下のようなクラスを作成し、 schema-toolでUPDATEするだけです! ※http://ec-cube.github.io/collaboration_migration#db-1
21.
Acme/Entity/ExamplePayment.php /** * Product の拡張 *
@Entity * @Table(name="example_product") */ class ExamplePayment extends ¥Eccube¥Entity¥Product { /** * @Column(name="example_field", type="string") */ public $ExampleField; }
22.
単価集計や、支払いなどの処理にデザインパターンを適用 一部のビジネスロジックにデザインパターンを適用し、柔軟かつ効率的に カスタマイズできるようになりました。 以下、 ShoppingController の一部です。 プラグイン側では、
CalculateStrategy や PaymentMethod クラスを実装す ることで、独自の決済手段を実装可能です。 現在は、商品購入処理のみとなっていますが、商品管理など他の機能にも 適用していく予定です。
23.
src/Eccube/Controller/ShoppingController.php // 購入処理 // 集計は,この1行で実行可能 //
プラグインで CalculateStrategy をセットしたりしてアルゴリズムの変更が可能 // 集計はステートレスな実装とし、再計算時に状態を考慮しなくても良いようにする $app['eccube.service.calculate']($Order, $Order->getCustomer())->calculate(); // 支払処理 $paymentService = $app['eccube.service.payment']($Order->getPayment()->getServiceClass()); // PaymentMethod クラスは、 Cash(銀行振込)、 CreditCard(クレジットカード)などを取得する $paymentMethod = $app['payment.method.request']($Order->getPayment()->getMethodClass(), $form, $request); // PaymentMethod 内の処理で、必要に応じて別のコントローラへ forward(移譲)可能 $dispatcher = $paymentService->dispatch($paymentMethod); // 決済処理中. if ($dispatcher instanceof Response && ($dispatcher->isRedirection() || $dispatcher->getContent())) { // $paymentMethod->apply() が Response を返した場合は画面遷移 return $dispatcher; } $PaymentResult = $paymentService->doCheckout($paymentMethod); // 決済実行 if (!$PaymentResult->isSuccess()) { $em->getConnection()->rollback(); return $app->redirect($app->url('shopping_error')); }
24.
プラグインを使用しないカスタマイズ 新たに `app/Acme` 以下に、カスタマイズ用のプログラムを置けるようにな りました。 •
プラグインにするまでもないような、ちょっとしたカスタマイズ • 既存のプラグインの振舞いを変更したい場合 • プラグインでは対応しにくい大規模カスタマイズ などに利用できます。 ※`Acme` という namespace は、任意のものに変更可能です。
25.
参考実装 • プラグインの参考実装 • プラグインを使用しないカスタマイズの参考実装
26.
プラグインの参考実装 https://github.com/nanasess/ec- cube/tree/CalculateStrategy/app/Plugin/ExamplePlugin • Plugin¥ExamplePlugin¥Controller¥ExampleController - ShoppingController
をオーバーライドし、独自の決済ボタンを実装して います。 • Plugin¥ExamplePlugin¥Payment¥Method¥ExamplePaymentCreditCard - 独自の決済処理を実装しています。 • Plugin¥ExamplePlugin¥Entity¥ExamplePayment - dtb_payment に独自 のカラムを追加しています。
27.
プラグインを使用しないカスタマイズの参考実装 https://github.com/nanasess/ec-cube/tree/CalculateStrategy/app/Acme • Acme¥Controller¥TestController -
独自コントローラの作成例です。 • Acme¥Controller¥AController - 上記 TestController の拡張例です。 • Acme¥Controller¥RoutingTestController - 管理画面, user_data の拡張例 です。 • Acme¥Entity¥ExtendedProduct - エンティティの拡張例です。 public プ ロパティを使用しています。
28.
thanks.
Download