Upload
kentaro-ohkouchi
View
4.585
Download
11
Embed Size (px)
DESCRIPTION
Citation preview
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
• Phrame • Ethna• CakePHP
PHP4, PHP5, PostgreSQL と MySQL に対応しているフレームワーク
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// {{{ 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();?>
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(); }}
OSC-kansai 2009 EC-CUBE の設計思想
• マスタ系のデータを DB に保持しておく• リクエストがあると , 動的に定数や配列
を生成• 生成したデータのキャッシュ生成
• 管理画面からデータ編集可能
EC-CUBE2.0 のアーキテクチャ
MasterData •パラメータ設定•マスタデータ管理
•自動アップデートに対応するため
OSC-kansai 2009 EC-CUBE の設計思想
1. 表示する画面の中に hidden でランダムな ID (トークン)を生成し , 埋め込んでおく . そのトークンをサーバー側でもセッション内に保持しておく .
2. その画面でサブミットされると , hidden に埋められていたトークンがサーバーに届く .
3. サーバーでは , hidden から届いたトークンと , セッション内に保持していたトークンを比較し , 一致していれば正しい遷移と判断する .
EC-CUBE2.0 のアーキテクチャ
トランザクショントークン
•二重サブミットの防止•外部からの不正サブミットの防止
OSC-kansai 2009 EC-CUBE の設計思想
init() 主にクラスの初期化を行うprocess() ビジネスロジックを実行するdestroy() 終了時 , 自動的に呼ばれる
EC-CUBE2.0 のアーキテクチャ
LC_Page クラスのライフサイクル
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 の設計思想
開発コミッター募集中!!
http://xoops.ec-cube.net/modules/tinyd0/index.php?id=9
OSC-Kansai 展示ブースで受付中!!
OSC-kansai 2009 EC-CUBE の設計思想
質疑応答
OSC-kansai 2009 EC-CUBE の設計思想
ご静聴ありがとうございました!