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 月 リリース 2006 年 10 月 リリース 2007 年 12 月 – リリース 現在 – 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 // {{{ 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 の設計思想 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 の設計思想 開発コミッター募集中!! OSC-Kansai 展示ブースで受付中!!
OSC-kansai 2009 EC-CUBE の設計思想 質疑応答
OSC-kansai 2009 EC-CUBE の設計思想 ご静聴ありがとうございまし た!