匠の伝承w マルチな時代の設計と開発 パート6.

Slides:



Advertisements
Similar presentations
New WorkFriend (AS版・PC版 概要説明) <New WorkFriend とは?> ・ネットワーク環境の上で、データベースを日常業務に活用す る。 ・WindowsのExcelとリンクした、照会・更新・分 析をするツール。 <New WorkFriend の機能> 1.データベースの照会機能.
Advertisements

情報基礎演習I(プログラミング) 第9回 6月22日 水曜5限 江草由佳
Accessによるデータベース(1) Ver.1 /11.
匠の伝承 マルチな時代の設計と開発.
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
TMenu メニューバーを用いた操作のための コンポーネント.
S2Container.NET, S2Dao.NET コミッタ 藤井 宏明
匠の伝承w マルチな時代の設計と開発 パート3.
CakePHPを業務に導入する Shin x blog 新原 雅司.
Win32APIとMFC H107102 古田雅基 H107048 佐藤一樹 H107126 山下洋平.
talend活用事例 ・ナビゲータグラフのカスタマイズにおける事例 ・CSVダウンロードでのカスタマイズ事例
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
PF(Project Facilitation) プロジェクト・ファシリテーション
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
ACCESSによる データベースアプリケーション開発実習 日本工業大学 情報工学科 “データベースの実際” 教材
Accessによる SQLの操作 ~実際にテーブルを操作してみよう!~.
Accessによるデータベース(3) Ver /11.
Al-Mailのインストールと使い方 インストール –1 (pop-authの設定、Al-Mailのインストール用ファイルをダウンロード)
Vulnerability of Cross-Site Scripting
F5 を押すか、または [スライド ショー] > [最初から] をクリックして、コースを開始してください。
匠の伝承w マルチな時代の設計と開発 パート2.
PF(Project Facilitation) プロジェクト・ファシリテーション
Bottle/Pythonによる Webアプリ入門
RAD Studio 14/09/27 TEffectを使った綺麗なForm
HTTPプロトコル J2EE I 第7回 /
エンタープライズアプリケーション II 第7回 / 2006年7月9日
Web上で管理・利用できる 面接予約データベースシステムの構築
アルゴリズムとデータ構造 2011年6月20日
マイクロソフト Access を使ってみよう 第1回
データベース設計 第9回 Webインタフェースの作成(1)
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
マイクロソフト Access を使ってみよう 第4回
QuestionnairToolの開発 中村太一.
マルチな時代の設計と開発 駆け足で PART(3,4),5,6
第12回 2007年7月13日 応用Java (Java/XML).
Borland Delphi 6 でビジュアルプログラミング
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第1回.リレーショナルデータベースを使ってみよう
第1回.リレーショナルデータベースを使ってみよう
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
匠の伝承w マルチな時代の設計と開発 パート7.
MVP for VB が語る C# 入門 初音 玲.
MVP for VB が語る C# 入門 初音 玲.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
マイクロソフト Access での SQL 演習 第5回 副問い合わせ
第6回 2007年6月1日 応用Java (Java/XML).
ミドルウェア”TSUNAGI”を 用いたWEBアプリケーションの構築
発注者側サイト操作説明書 作成日:2004年6月 Ver1.0 初版 改 訂:2005年9月 Ver1.2 株式会社 コニファ.
調達見積回答 [インストラクタ・ノートがここに表示されます(ある場合)].
Javaによる Webアプリケーション入門 第11回
中国の日系企業に最適のシステム 御社の業務に最適な3つの理由 初期投資なしで すぐに始められる ITに詳しい 担当者不要 何度でも 変更可能.
マイクロソフト Access を使ってみよう 第3回
データベース設計 第6回 DBMSの機能と操作方法(3) フォームとレポート
マイクロソフト Access での SQL 演習 第2回 集計,集約
ログイン(システム利用規約合意) [インストラクタ・ノートがここに表示されます(ある場合)].
匠の伝承w マルチな時代の設計と開発 パート4.
情報基礎演習I(プログラミング) 第8回 6月8日 水曜5限 江草由佳
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
Action Method の実装 J2EE II 第9回 2004年12月2日.
Jakarta Struts (1) ソフトウェア特論 第10回.
匠の伝承w マルチな時代の設計と開発 パート7.
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
データベース第3回目 意味ごとにテーブルを分ける
匠の伝承w マルチな時代の設計と開発 パート4.
アルゴリズムとデータ構造 2012年6月21日
ソフトウェア制作論 平成30年10月17日.
JSFによるWebアプリケーション開発 第7回
ZendFrameworkで使うためにFilemakerクラスをスクラッチから作ってみる
Presentation transcript:

匠の伝承w マルチな時代の設計と開発 パート6

スピーカー自己紹介 / \ / ─ ─\ ゆーちです。 / ,(●) (●)、\ | (__人__) |     /      \    /  ─    ─\    ゆーちです。  /    ,(●) (●)、\     |       (__人__)    |     \     ` ⌒´   /    本名は、内山康広といいます。 ,,..イ.ヽヽ、___ ーーノ゙-、.    31歳(H)です。おっさんです(笑) :   |  ‘; \_____ ノ.| ヽ I     |  \/゙(__)\,|  i |      >   ヽ. ハ  |   ||  株式会社シーソフト代表取締役です。                  現役のエンジニアです。プログラム書いてます。 にこにこカレンダーシートを販売しています。 BkReplyer をシェアウェアにさせていただきました。 Special thanks for 2ch.

前回のおさらい /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒:::::\ | |r┬-| | がんばったお。      /⌒  ⌒\          /( ●)  (●)\   /::::::⌒(__人__)⌒:::::\   |     |r┬-|     | がんばったお。    \      `ー'´     /

変数の基本的な話 変数を自動化してみようという話

たとえば、こんな画面 ユーザー名とパスワードを入力 ログインボタンが押されたら、 ユーザー名 入力情報が正しい文字の組み 合わせになっているか検査 ユーザーが存在し、パスワード が正しいかを検証 ユーザー名 パスワード ログイン キャンセル          ____        )   余裕のよっちゃんだお         /⌒  ⌒\      )        /( ●)  (●) \    )/⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y丶      / ::::::⌒(__人__)⌒::::: \     |      |r┬-|     |      \       `ー'´     /      カ       ノ            \       タ    /´               ヽ                 カ   |    l   l||l 从人 l||l      l||l 从人 l||l   カ    タ   ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ   タ    ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))  タ   タ       ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐    ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄

Formのコードイメージ Form::OnLoginClick() { string UserName = Text1->Text; string Password = Text2->Text; bool ret = Logic->Check( UserName, Password ); if( ret == true ) ret = Logic->Login( UserName, Password ); } if( ret == false ) : 編集テキストを内部で取得 ロジックに問い合わせ

Logicのコードイメージ bool Logic::Check( string UserName, string Password ) { return 真偽; } bool Logic::Login( string UserName, string Password ) bool exist = DAL->QueryUser( UserName, Password ); return exist;

DALのコードイメージ DAL::QueryUser( string UserName, string Password ) { string SQL=“SELECT COUNT * from UserTable “ “where (UserName=\‘%s\’)” “and (Password=\’%s\’)”; try SQL.FormatString( UserName, Password ); DataBase->Query( SQL ); if( DataSet->Count >= 1 ) return true; } }catch( ... ){ return false;          ____        /      \     なんだか、おんなじこと       /  ─    ─\        /    (●)  (●) \   ばかり書いてるきがするお     |       (__人__)    | ________      \      ` ⌒´   ,/ .| |          |     ノ           \ | |          |   /´                 | |          |

Form/Logic/DAL に設計情報から そこで・・・ Form/Logic/DAL に設計情報から 自動的に変数を作り出してしまおう という試み。

基本クラスでXMLを取り込み自動的に内部変数を用意する Form/Logic/DAL クラスを作る。 <Form Name=“Form1”> <UserInterface> <Field Name=“UserName”, DisplayName=“ユーザー名”, Type=“String”, ... > <Field Name=“Password”, DisplayName=“パスワード”, Type=“String”, ... > </UserInterface> </Form> <Database Name=“AppDB”> <Table Name=“UserTable”> <Field Name=“UserName”, DisplayName=“ユーザー名”, Type=“String”, ... > <Field Name=“Password”, DisplayName=“パスワード”, Type=“String”, ... > </Table> </Database> 基本クラスでXMLを取り込み自動的に内部変数を用意する Form/Logic/DAL クラスを作る。

ちょっとまって。ホントに便利になる? Form::OnLoginClick() { string UserName = Text1->Text; string Password = Text2->Text; bool ret = Logic->Check( UserName, Password ); if( ret == true ) ret = Logic->Login( UserName, Password ); } if( ret == false ) :

基底クラスの Fields[] 変数を利用してみると・・・ Form::OnLoginClick() { bool ret=Logic->Check(Fields[“UserName”], Fields[“Password”]); if( ret == true ) ret = Logic->Login(Fields[“UserName”], Fields[“Password”]); } if( ret == false ) :        ____          /⌒三 ⌒\      /( ○)三(○)\  よけいにめんどくさくなったお   /::::::⌒(__人__)⌒:::::\   |     |r┬-|     |   \      `ー'´   / 

変数だけを略してもダメ!

似通った処理をコンポーネントにしてしまおうぜっ!みたいな(笑) 本日のテーマ アプリケーション・パターン 似通った処理をコンポーネントにしてしまおうぜっ!みたいな(笑)

ちょいと具体例を挙げていってみましょう こんな画面 入力コントロール ユーザー名 パスワード アクション / ̄ ̄ ̄ \ ホジホジ ログイン キャンセル アクション        / ̄ ̄ ̄ \  ホジホジ      / ―   ― \     /   (●)  (●)  \   ん?     |     (__人__)      |      \   mj |⌒´     /   さっきといっしょ?        〈__ノ       ノ   ノ

コントロールから値を取り出し、ロジックでCheck後にLogin ビューとロジックの内部処理 ロジック ユーザー名 パスワード ログイン キャンセル データアクセス Logic::Check (...) { } Logic::Login(...) Logic::Cancel (...) 文字妥当性 登録されてるの? DAC::QueryUser(...) { } DAC::Connect(...) 登録されてるの? ビュー Form::OnLoginClick() { } Form::OnCancelClick() ログインの記録とか コントロールから値を取り出し、ロジックでCheck後にLogin なにかする 終了処理 ロジックでCancel

別の例を考えてみましょう。 こんな画面 入力コントロール ■ × 社員コード 社員名 検索 生年月日 閉じる アクション 表示コントロール

Form::OnSearchClick() { } ■ × 社員コード 社員名 検索 生年月日 閉じる ロジック データアクセス Logic::Check (...) { } Logic::Search(...) 文字妥当性 登録されてるの? DAC::QueryUser(...) { } DAC::Search(...) 登録されてるの? ビュー Form::OnSearchClick() { } Form::OnChangeField() 社員コードで データ検索 コントロールから値を取り出し、ロジックでCheck後にSearch 社員検索SQL発行 データセットからフォーム用変数の通知 ロジックから値の変更通知を受け取ったら、コントロールに設定

注意:コードはあくまでもふいんきwです。 これら2つを1つにできないでしょうか? BaseForm::OnActionExecute() { //入力コントロールを列挙 foreach( Control *control = InputControls ){ // ロジックのプロパティに入力値を転送 Logic->Fields[control->Name] = Fields[ control->Name]; } // ロジックに値チェックをお願いする if( Logic->Check() == true ){ Logic->Execute(); 注意:コードはあくまでもふいんきwです。        ____          /⌒三 ⌒\      /( ○)三(○)\  ごちゃまぜに      /::::::⌒(__人__)⌒:::::\ なっちまうお?   |     |r┬-|     |   \      `ー'´   / 

BaseForm::OnPropertyNotifyChanged() { //表示コントロールを列挙 foreach( Control BaseForm::OnPropertyNotifyChanged() { //表示コントロールを列挙 foreach( Control *control = DisplayControls ){ // ロジックのプロパティに入力値を転送 Fields[control->Name] = Logic->Fields[control->Name]; } Repaint(); ■ × 社員コード 社員名 検索 生年月日 閉じる 表示コントロールに 値が設定される

Logicはどうなる? bool BaseLogic::Check() { return true; } bool BaseLogic::Execute() 検証すべきフィールドや条件は毎回異なるので、基底クラス(BaseLogic)では汎用的な実装はできませんね。 何を実行するのか、というのも要件によって異なりますので、基底クラスで実装できにくいですね・・・        ____      /ノ   ヽ、_\     /( ○)}liil{(○)\    (意味なさそうだお)   /    (__人__)   \   |   ヽ |!!il|!|!l| /   |      \    |ェェェェ|     /   /              \

派生クラスで個別対応? class LoginLogic : public BaseLogic … bool LoginLogic::Check() { return DAL->QueryUser(Fields[ “UserName” ], Fields[ “Password” ]); } 仮にロジックを個別実装することになったとしても、この方法が実現できれば、少なくともフォームのコードについては基底クラスが処理してくれるので、画面設計だけやっておけばロジックの必要箇所の実装だけですむことになります。

標準のアクションリスト 一般的な業務アプリケーションの場合、オペレータのアクションの入り口(メニューやボタン)には、次のようなアクションが用意されます。 「キャンセル」 「OK(実行)」「更新」「登録」「確定」 「削除」「検索」 「前ページ」「次ページ」 「コピー」「貼り付け」などなど 定型ロジックを基底クラスにうめこんじゃおう

Formの[OK]処理 入力フィールドを検証(Check) >チェックNGの場合、メッセージ表示 >間違った箇所にカーソル移動 チェックOKなら、実行処理(Execute) >必要な保存処理を実施する

フォームを閉じる。 アプリケーションフォームならプログラムを終了する Formの[キャンセル]処理 フォームを閉じる。 アプリケーションフォームならプログラムを終了する        / ̄ ̄ ̄ \  ホジホジ      / ―   ― \     /   (●)  (●)  \    えー???     |     (__人__)      |   このくらいまでならわかるけど     \   mj |⌒´     /  なかなかそう簡単に共通化は        〈__ノ        できないんじゃなぁい???       ノ   ノ

グリッドを持つ画面 月間集計表 ■ × 月 Month 商品コード 商品名 顧客コード 数量 単価 金額 ProductId Product 表示 商品コード 商品名 顧客コード 数量 単価 金額 ProductId Product CutomerId Count UnitPrice Amount 赤い文字はXMLで定義された名前 前ページ 次ページ 閉じる

基底データアクセスロジックの一部・・・ [表示]ボタン処理 string SQL = “SELECT “ foreach( field = OutputFields ){ SQL += field->Name; if( field != End of List ){ SQL += “,“; } SQL += “from “ +DatabaseTable; SQL += “WHERE “; foreach( field = InputFields ){ SQL += InputFields->Name + “= \’”      + InputFiels->Value + “\’”; SQL += “&&”; SELECT ProductId,Product,CutomerId,Count,UnitPrice,Amount from UserDatabase.UserTable where Month = “5”; ページ行数+1を選択とかもあり。 この辺もXMLで定義

[次ページ]ボタン処理(あくまでもイメージw) BaseLogic::NextPage() { DAL->NextPage( CurrentPage ); foreach( Grid[ “グリッドの名前” ].Fields ) Grid[グリッド名].Field[ フィールド名 ] = DAL->Dataset[ フィールド名 ]; } Observers->Notify( GRID_CHANGE, グリッド名); SQL発行 データセットからローカルに値を取得 グリッドを表示しているフォームに変更通知

そのとおり。 DBとは異なる格納なら、DALだけかえてしまえばいいんじゃない? (設定情報をiniファイルに書いたりレジストリにしたり) データベースがあるとは限らない! そのとおり。 DBとは異なる格納なら、DALだけかえてしまえばいいんじゃない? (設定情報をiniファイルに書いたりレジストリにしたり) データベース、ini ファイル、レジストリの入出力があれば、多くのアプリケーションでは満足なのでは?

通信を利用するアプリケーションに適用できない! そんなことはないっす。 一般的な通信手段として ・TCP/IPとか ・COMポートとか は、標準的なやりとりで吸収できます。

・サーバーアプリケーション ServerSocket ・クライアントアプリケーション ClientSocket クラサバ ・サーバーアプリケーション ServerSocket ・クライアントアプリケーション ClientSocket          ____        / \  /\ キリッ .     / (ー)  (ー)\         /   ⌒(__人__)⌒ \   基底コンポーネントの     |      |r┬-|    |   考え方、固まったお      \     `ー'´   /     ノ            \   /´               ヽ  |    l              \  ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.   ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

たとえば、どうなる? 典型的な例では、「マスターメンテナンス画面」 テーブル設計 メンテナンス画面 それぞれのXML定義 だけで、コードを書かずにできあがってしまう!      /⌒  ⌒\      ほんとかお?    /( ●)  (●)\   /::::::⌒(__人__)⌒::::: \   よろしくおながいしますお!   |     |r┬-|     |    \      `ー'´     /

アプリケーションの設定情報 画面レイアウト、XML定義だけでコードを書かなくて、できちゃう。 たとえば、どうなる? アプリケーションの設定情報 画面レイアウト、XML定義だけでコードを書かなくて、できちゃう。        ____      /      \    /  _ノ  ヽ、_  \   /  o゚⌒   ⌒゚o  \  めんどくさかったお    |     (__人__)    |   \     ` ⌒´     /

プログラムの開発時間を大幅に短縮できる!      /⌒  ⌒\      ほんとかお?    /( ●)  (●)\   /::::::⌒(__人__)⌒::::: \   定時で帰っていいのかお?   |     |r┬-|     |    \      `ー'´     / デスマーチからの解放!

現在、誠意開発中(笑) ____ /ノ ヽ、_\ /( ○)}liil{(○)\ まだできてないのかお! / (__人__) \        ____      /ノ   ヽ、_\     /( ○)}liil{(○)\    まだできてないのかお!   /    (__人__)   \   |   ヽ |!!il|!|!l| /   |      \    |ェェェェ|     /   /              \

____ / \ / ─ ─\ 残念ながら時間がきてしまったようです。 / ,(●) (●)、\ | (__人__) | \ ` ⌒´ / ,,.....イ.ヽヽ、___ ーーノ゙-、. 次回は、ここで紹介したフレームワークを : | ‘; \_____ ノ.| ヽ I 実際にデモを交えてご紹介しましょう。 | \/゙(__)\,| i | > ヽ. ハ | || いつになるのか、皆目見当もつかないわけだw

ご静聴ありがとうございました。 m(_._)m                                  ,.へ   ___                             ム  i  「 ヒ_i〉                            ゝ 〈  ト ノ                           iニ(()  i  {              ____           |  ヽ  i  i           /__,  , ‐-\           i   }  |   i         /(●)   ( ● )\       {、  λ  ト-┤.      /    (__人__)    \    ,ノ  ̄ ,!  i   ゝ、_     |     ´ ̄`       | ,. '´ハ   ,! . ヽ、    `` 、,__\              /" \  ヽ/    \ノ ノ   ハ ̄r/:::r―--―/::7   ノ    /        ヽ.      ヽ::〈; . '::. :' |::/   /   ,. "         `ー 、    \ヽ::. ;:::|/     r'"      / ̄二二二二二二二二二二二二二二二二ヽ      | |       お し ま い         │|      \_二二二二二二二二二二二二二二二二ノ    /      \   /  ─    ─\   うーん・・・ /    (●)  (●) \  |       (__人__)    |   /     ∩ノ ⊃  /    (  \ / _ノ |  |     .\ “  /__|  |  アプリケーション・パターン     \ /___ /  ってなんだったのかお!? Special thanks for Yaruo charactors