スライド 1

OSC-kansai 2009 EC-CUBEの設計思想
EC-CUBEの設計思想について
2009/7/11(土)
有限会社Loop AZ 大河内健太郎
OSC-kansai 2009 EC-CUBEの設計思想
自己紹介
•
•
•
•
名前: 大河内健太郎 (id:nanasess)
年齢: 32才
出身: 愛知県
前職: 寿司屋の板前を7年半
• FreeBSD/Mac OS X 使ってます
• 普段は Java のフレームワーク開発とか
• Emacs23 のアイコン作りました
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
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 との互換性
OSC-kansai 2009 EC-CUBEの設計思想
EC-CUBE 2.0 の改良点
•
•
•
•
自動アップデート
複数カテゴリ
デザインテンプレート
脆弱性対応(CSRF など)
アーキテクチャの大幅な改変
OSC-kansai 2009 EC-CUBEの設計思想
既存フレームワークと EC-CUBE
PHP4, PHP5, PostgreSQL と MySQLに対応しているフレームワーク
• Phrame
• Ethna
• CakePHP
Struts ベースはイマイチ...
Ruby on Rails ベースは規約が多くて使いにくい…
1.x をベースにして自作することに
OSC-kansai 2009 EC-CUBEの設計思想
EC-CUBE2.0 のアーキテクチャ
•基本的に1ページ1クラス
•LC_Page クラスを基底クラスとし, LC_Page を継承して各ページに使用
•直接WebアクセスされるPHPは, LC_Page を継承したクラスを実行するのみ
<?php
// {{{ requires
require_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();
?>
OSC-kansai 2009 EC-CUBEの設計思想
EC-CUBE2.0 のアーキテクチャ
extends
•基底クラスを継承する空のクラスを用意
•ユーザーは, この空のクラスをカスタマイズする
/**
* 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();
}
}
•自動アップデートに対応するため
•カスタマイズ時のコンフリクトを避けるため
•活かすにはリファクタリングが必要…
OSC-kansai 2009 EC-CUBEの設計思想
EC-CUBE2.0 のアーキテクチャ
MasterData
•パラメータ設定
•マスタデータ管理
• マスタ系のデータをDBに保持しておく
• リクエストがあると, 動的に定数や配列を生成
• 生成したデータのキャッシュ生成
• 管理画面からデータ編集可能
•自動アップデートに対応するため
OSC-kansai 2009 EC-CUBEの設計思想
EC-CUBE2.0 のアーキテクチャ
トランザクショントークン
1. 表示する画面の中にhiddenでランダムなID(トークン)を生成し, 埋め込んでおく.
そのトークンをサーバー側でもセッション内に保持しておく.
2. その画面でサブミットされると, hiddenに埋められていたトークンがサーバーに届
く.
3. サーバーでは, hidden から届いたトークンと, セッション内に保持していたトーク
ンを比較し, 一致していれば正しい遷移と判断する.
•二重サブミットの防止
•外部からの不正サブミットの防止
OSC-kansai 2009 EC-CUBEの設計思想
EC-CUBE2.0 のアーキテクチャ
LC_Page クラスのライフサイクル
init()
process()
destroy()
主にクラスの初期化を行う
ビジネスロジックを実行する
終了時, 自動的に呼ばれる
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()
デバック内容を画面に出力する
OSC-kansai 2009 EC-CUBEの設計思想
開発スタイル
• テスト駆動開発 (test-driven development; TDD)
• PHPUnit
活用されてる形跡が無いのが寂しいorz
OSC-kansai 2009 EC-CUBEの設計思想
今後
•
•
•
•
•
•
徹底的にリファクタリング - 特にモバイル
プラグイン機能 - 鋭意開発中
共有SSL
HTMLテンプレート - Seasar2 の Teeda や Mayaa みたいの
i18n
他のDBにも対応
– DBアクセスレイヤーをしっかり分けたい
– Chain Of Responsibility
• ECパッケージの標準仕様策定
• EC-CUBE3.0 - 徹底的にモジュール化
OSC-kansai 2009 EC-CUBEの設計思想
開発コミッター募集中!!
OSC-Kansai 展示ブースで受付中!!
http://xoops.ec-cube.net/modules/tinyd0/index.php?id=9
OSC-kansai 2009 EC-CUBEの設計思想
質疑応答
OSC-kansai 2009 EC-CUBEの設計思想
ご静聴ありがとうございました!