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の設計思想 ご静聴ありがとうございました!
© Copyright 2024 ExpyDoc