Shibuya Perl Mongersテクニカルトーク#2 Tue, 1 Apr 2003 We are a group of people dedicated to the encouragement of all things Perl-like in Shibuya. Perl用Webアプリケーション フレームワーク考察 EY-Office 吉田裕美 協力:株式会社ユラス なぜフレームワークなのか 短い開発期間 信頼性が求められる 仕様変更、機能拡張は必ずある いつも優秀な人材が確保できるとはかぎらない 設計やコードの再利用 再利用 ライブラリー(モジュール) Application Application Module Module ・設計・実装の自由度は高い Module Module Module Module Application Framework Appl Module ・生産物の質、開発効率が開発者の レベルに依存しやす 再利用される部分 フレームワーク Appl Module ・「設計」が再利用されなかもしれない Appl Module ・設計・実装はフレームワークのスタ イルにあわせる必要がある ・「設計」が再利用される ・生産物の質、開発効率が開発者の レベルに依存しにくい GN/GNAフレームワークの特徴 (1) Web Appl用基本機能 セッション管理 post/get値の処理 (日本語、ファイルupload…) cookie エラー処理 タイムアウト処理 GN/GNAフレームワークの特徴 (2) 高度な型の集中管理 通貨 (\23,000) やE-mailアドレスなどのアプリ寄 りな型のサポート 入出力時の内部⇔外部表現の変換 入力時の形式、値の自動チェック 型はアプリレイヤーで追加可能 型とカラム(DB)の対応付け GN/GNAフレームワークの特徴 (3) ページ遷移の集中管理 現在のページとイベント(submit button)による遷 移の制御 アプリ(マクロ)の戻り値による遷移の制御 論理的なページとテンプレートの対応付け 遷移のグループ化 Excel の表で遷移を記述し upload GN/GNAフレームワークの特徴 (4) デザイナーに優しいテンプレート HTML editor/IE 等でテンプレートを表示してデ ザイナーがページを(想像し)デザインできる デザイン時だけに有効なデザイナー支援タグ 必要最小限な制御タグ(switch,loop) アプリで動作を定義可能な 関数タグ DB(型)との連携 GN/GNAフレームワークの特徴 (5) アプリ支援の機能 標準マクロ(定義済アプリ) 検索結果の表示、データ入力・確認・DB格納… ログイン ユザー(ユザークラス)毎にテンプレートの一部 をON/OFFするアクセス制御 ヘルプページ機能 パンくずリストサポート機能 GN/GNAフレームワークの特徴 (6) その他 DBアクセス・ライブラリー リソースの集中管理 DB定義、型、メッセージ、ページ遷移… コンフィグファイル デバック支援 ログ管理 メール送信 文字列処理 (日本語…) GN/GNAフレームワークのMVCモデル View: テンプレート (5) <html> <%<%gna gnasimple_confirm simple_confirm region=user_region region=user_region table=userm table=userm %>%> <body> <table > <%loop col_loop%> <tr> <td> <%table.col:name%> </td> <td> <%table.col%> </td> </tr> <%loop_end%> </table> Controller: ページ遷移 ページID COND_RESULT COND_RESULT COND_RESULT SEARCH2 SEARCH2 COND_RESULT COND_RESULT COND_RESULT イベント ok return reset NODATA OK priv next refresh Modele: マクロ定義 sub gna_simple_confirm { my ($opt,$tmpl) = @_; my $table = $$opt{table}; # 項目のチェック (4) gna_check_param_exists($opt,'table,hidden_values_id' ); gna_check_param_exists($opt,'loop_id,data_id') if( $$opt{cols} ne '' ); my @titles = split(/,/,$$opt{titles}); # null_ok が 1 なら NULL チェックをしない my $old_null = gn_db_set_null_check( $$opt{null_ok} ne '1' ); (2) (1) (3) 遷移ページ SEARCH2 main:MAIN_MENU COND_RESET2 serach:NO_DATA COND_RESULT COND_RESULT COND_RESULT COND_RESULT # デフォルト値の設定 %input に値がないときに、 指定されたマークから始まる # 値で置き換える if( $$opt{input_default_prefix} ne '' ) { my $mark = $$opt{input_default_prefix}; GN/GNAフレームワークを使ってみて (1) 利点:開発者のレベルによらない開発が出来た あるプロジェクトのメンバー例 リーダー(アーキュテクト、兼業) フレームワーク開発者(専用) アプリ開発者(専用) アプリ開発者(兼業) デザイナー(兼業) ‥‥ 1人 ‥‥ 1人 ‥‥ 1人 ‥‥ 3人 ‥‥ 1人 開発期間、品質ともに予想以上であった GN/GNAフレームワークを使ってみて (2) 問題点:いかにフレームワークの設計思想、 使い方を開発メンバーに理解してもらうか ドキュメント 講習会 サンプルコード QAミーティング GN/GNAフレームワークを使ってみて (3) 問題点: アプリとフレームワークの機能拡張 機能分担をどうするか アーキュテクト(リーダー)の洞察力 設計思想に立ち戻る 問題点ミーティング Perl 2年生の私がフレームワークを作るのに 思ったこと・・・(1) Perlは以前に思っていたより高速 Perlは以前に思っていたより 大規模なプログラム作成に 耐えられる言語 オブジェクト指向 vs 手続き型 吉田はPerlのオブジェクト指向がどうも好きになれなかった・・・ 実はPerlのオブジェクト指向を良く理解してないだけかも ^^); 手続き型を採用 逆QA: どうなんでしょうか? Perl 2年生の私がフレームワークを作るのに 思ったこと・・・(2) Moduleを積極的に使う・使わない? Moduleの信頼性はだいじょうぶ? とくに依存関係のあるModuleのバージョンアップは 安全? Module間でAPI等に一貫性がない? ほとんどModuleは使わなかった 逆QA: どうなんでしょうか? ご清聴 ありがとうございま す! GN/GNAフレームワークルーツに関する問い合わせ先 株式会社ユラス [email protected] 03-5457-1351 ♪♪♪ 吉田 裕美 (Yuumi Yoshida)
© Copyright 2024 ExpyDoc