Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
EC-CUBE の設計思想について 2009/7/11( 土 ) 有限会社 Loop AZ  大河内健太郎
<ul><li>名前 :  大河内健太郎  (id:nanasess) </li></ul><ul><li>年齢 : 32 才 </li></ul><ul><li>出身 :  愛知県 </li></ul><ul><li>前職 :  寿司屋の板前...
EC-CUBE  とは 日本発 EC オープンソース <ul><li>2006 年 9 月  - 0.9.6 リリース </li></ul><ul><li>2006 年 10 月  - 1.0.0 リリース </li></ul><ul><li>...
<ul><li>PHP4, PHP5 </li></ul><ul><li>PostgreSQL7.x, MySQL4.1, MySQL5.x </li></ul><ul><li>Windows  と  UNIX 系  OS(IIS  と  Ap...
<ul><li>自動アップデート </li></ul><ul><li>複数カテゴリ </li></ul><ul><li>デザインテンプレート </li></ul><ul><li>脆弱性対応 (CSRF  など) </li></ul>EC-CUB...
<ul><li>Phrame  </li></ul><ul><li>Ethna </li></ul><ul><li>CakePHP </li></ul>既存フレームワークと  EC-CUBE PHP4, PHP5, PostgreSQL  と ...
EC-CUBE2.0  のアーキテクチャ <ul><li>基本的に 1 ページ 1 クラス </li></ul><ul><ul><li>LC_Page  クラスを基底クラスとし , LC_Page  を継承して各ページに使用 </li></ul...
<ul><li>extends </li></ul>EC-CUBE2.0  のアーキテクチャ <ul><li>自動アップデートに対応するため </li></ul><ul><li>カスタマイズ時のコンフリクトを避けるため </li></ul><u...
<ul><li>マスタ系のデータを DB に保持しておく </li></ul><ul><li>リクエストがあると ,  動的に定数や配列を生成 </li></ul><ul><li>生成したデータのキャッシュ生成 </li></ul><ul><l...
<ul><li>表示する画面の中に hidden でランダムな ID (トークン)を生成し ,  埋め込んでおく .  そのトークンをサーバー側でもセッション内に保持しておく . </li></ul><ul><li>その画面でサブミットされると...
<ul><li>init() 主にクラスの初期化を行う </li></ul><ul><li>process() ビジネスロジックを実行する </li></ul><ul><li>destroy() 終了時 ,  自動的に呼ばれる </li></u...
EC-CUBE2.0  のアーキテクチャ LC_Page  クラスの関数群 <ul><li>sendRedirect() </li></ul><ul><ul><li>リダイレクト先  URL  に  SITE_URL  及び  SSL_URL ...
<ul><li>テスト駆動開発  (test-driven development; TDD)  </li></ul><ul><li>PHPUnit </li></ul>開発スタイル 活用されてる形跡が無いのが寂しい orz
<ul><li>徹底的にリファクタリング  -  特にモバイル </li></ul><ul><li>プラグイン機能  -  鋭意開発中 </li></ul><ul><li>共有 SSL </li></ul><ul><li>HTML テンプレート...
開発コミッター募集中!! http://xoops.ec-cube.net/modules/tinyd0/index.php?id=9 OSC-Kansai  展示ブースで受付中!!
質疑応答
ご静聴ありがとうございました!
Upcoming SlideShare
Loading in …5
×

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

4,844 views

Published on

  • Be the first to comment

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

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

×