17
OSC-kansai 2009 EC-CUBE ののののの EC-CUBE ののののののののの 2009/7/11( の ) のののの Loop AZ のののののの

EC-CUBEの設計思想について

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

EC-CUBE の設計思想について

2009/7/11( 土 )

有限会社 Loop AZ  大河内健太郎

Page 2: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

• 名前 : 大河内健太郎 (id:nanasess)• 年齢 : 32 才• 出身 : 愛知県• 前職 : 寿司屋の板前を 7 年半

• FreeBSD/Mac OS X 使ってます• 普段は Java のフレームワーク開発とか• Emacs23 のアイコン作りました

自己紹介

Page 3: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

EC-CUBE とは

日本発 EC オープンソース

•2006 年 9 月 - 0.9.6 リリース•2006 年 10 月 - 1.0.0 リリース•2007 年 12 月 – 2.0.0 リリース

•現在 – Version 2.4.1

Page 4: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

EC-CUBE 2.0 の要件

• PHP4, PHP5• PostgreSQL7.x, MySQL4.1, MySQL5.x• Windows と UNIX 系 OS(IIS と

Apache)• XHTML1.0 + CSS2 valid• UTF-8• error_reporting(E_ALL)• 1.x との互換性

Page 5: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

EC-CUBE 2.0 の改良点

• 自動アップデート• 複数カテゴリ• デザインテンプレート• 脆弱性対応 (CSRF など)

アーキテクチャの大幅な改変

Page 6: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

既存フレームワークと EC-CUBE

• Phrame • Ethna• CakePHP

PHP4, PHP5, PostgreSQL と MySQL に対応しているフレームワーク

Struts ベースはイマイチ ...Ruby on Rails ベースは規約が多くて使いにくい…

1.x をベースにして自作することに

Page 7: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

EC-CUBE2.0 のアーキテクチャ

•基本的に 1 ページ 1 クラス•LC_Page クラスを基底クラスとし , LC_Page を継承して各ページに使用•直接 Web アクセスされる PHP は , LC_Page を継承したクラスを実行するのみ

<?php// {{{ requiresrequire_once("./require.php");require_once(CLASS_EX_PATH . "page_extends/LC_Page_Index_Ex.php");// }}}// {{{ generate page

$objPage = new LC_Page_Index_Ex();register_shutdown_function(array($objPage, "destroy"));$objPage->init();$objPage->process();?>

Page 8: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

extends

EC-CUBE2.0 のアーキテクチャ

•自動アップデートに対応するため•カスタマイズ時のコンフリクトを避けるため•活かすにはリファクタリングが必要…

•基底クラスを継承する空のクラスを用意•ユーザーは , この空のクラスをカスタマイズする

/** * Index のページクラス ( 拡張 ). * * LC_Page_Index をカスタマイズする場合はこのクラスを編集する .*/class LC_Page_Index_Ex extends LC_Page_Index {

function init() { parent::init(); } function process() { parent::process(); } function destroy() { parent::destroy(); }}

Page 9: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

• マスタ系のデータを DB に保持しておく• リクエストがあると , 動的に定数や配列

を生成• 生成したデータのキャッシュ生成

• 管理画面からデータ編集可能

EC-CUBE2.0 のアーキテクチャ

MasterData •パラメータ設定•マスタデータ管理

•自動アップデートに対応するため

Page 10: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

1. 表示する画面の中に hidden でランダムな ID (トークン)を生成し , 埋め込んでおく . そのトークンをサーバー側でもセッション内に保持しておく .

2. その画面でサブミットされると , hidden に埋められていたトークンがサーバーに届く .

3. サーバーでは , hidden から届いたトークンと , セッション内に保持していたトークンを比較し , 一致していれば正しい遷移と判断する .

EC-CUBE2.0 のアーキテクチャ

トランザクショントークン

•二重サブミットの防止•外部からの不正サブミットの防止

Page 11: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

init() 主にクラスの初期化を行うprocess() ビジネスロジックを実行するdestroy() 終了時 , 自動的に呼ばれる

EC-CUBE2.0 のアーキテクチャ

LC_Page クラスのライフサイクル

Page 12: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

EC-CUBE2.0 のアーキテクチャ

LC_Page クラスの関数群sendRedirect()

リダイレクト先 URL に SITE_URL 及び SSL_URL を含むかチェックし , LC_Page::getToken() の値を URL パラメータで自動的に付与する .

getLocation()

サーバー上の PATH から絶対 URL を取得する

getToken()

トランザクショントークンを生成し , 取得する .

isValidToken()

トランザクショントークンの妥当性をチェックする .

p()

デバック内容を画面に出力する

Page 13: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

• テスト駆動開発 (test-driven development; TDD)

• PHPUnit

開発スタイル

活用されてる形跡が無いのが寂しい orz

Page 14: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

• 徹底的にリファクタリング - 特にモバイル• プラグイン機能 - 鋭意開発中• 共有 SSL

• HTML テンプレート - Seasar2 の Teeda や Mayaa みたいの

• i18n

• 他の DB にも対応– DB アクセスレイヤーをしっかり分けたい– Chain Of Responsibility

• EC パッケージの標準仕様策定• EC-CUBE3.0 - 徹底的にモジュール化

今後

Page 15: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

開発コミッター募集中!!

http://xoops.ec-cube.net/modules/tinyd0/index.php?id=9

OSC-Kansai 展示ブースで受付中!!

Page 16: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

質疑応答

Page 17: EC-CUBEの設計思想について

OSC-kansai 2009 EC-CUBE の設計思想

ご静聴ありがとうございました!