【E3】Delphi/C++テクニカルセッション「移行プロジェクトでもモバイル開発でも必須！

今からでも間に合うデータモジュール活用法」
株式会社ドリームハイブ
代表取締役 山本悟

自己紹介
名前：山本 悟 (やまもと さとる)
– 代表取締役 & ITコンサルタント

会社：株式会社 ドリームハイブ
–––
–

会社URL
山本のブログ
facebook
twitter：http://www.dreamhive.co.jp/：http://blog.dreamhive.co.jp/yama/：http://www.facebook.com/kryu2：https://twitter.com/kryu2

山本はこんな感じの人：––––

17歳からIT業界へ
Delphi は1.0からの親友
テレビ埼玉に出たり、リクルート系雑誌に載ったりドリームハイブの経営、ITコンサルティング、システム開発、スピーカーなどが今の主な仕事
2

アジェンダ• はじめに– データモジュールとは– データモジュールを使っていないとどうなる？
– 使った際の利点• データモジュール再入門– はじめての人向け– やっちゃった人向け– その他TIPS• デモデモでも〜• まとめ
3

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

移行プロジェクトでもモバイル開発でも必須！
今からでも間に合うデータモジュール活用法

はじめに

4

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

データモジュール使っていますか？

5

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

データモジュールとは• データモジュールは、非ビジュアルコンポーネントのコンテナで、たとえば、データアクセスコンポーネントを隠蔽・集中管理することができます。

6

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

使っていないと…
使わなくてもアプリケーションは開発できますがフォーム上にポトペタしていると• UIの変更に巻き込まれる• システム拡張• 設計変更（データベースの設計変更も含む）などがあると死にます。
7

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

問題が起こるケース• それは要求変更！！
• 例）– 複数のPCから見られるのは当たり前だろオーダーが入った！
– 社長からWebが主流らしいじゃんの鶴の一声が出た！
– 最近流行のモバイルアプリに対応しろオーダーが入った！
8

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

何が問題となるのか？
••
•
•
•
•

複数クライアントから同時アクセスを想定しなければならないクライアント環境が複数存在する事になるクライアントへの配布が難しい
クライアントアプリケーションのバージョン管理が難しい
他のシステムやライブラリを利用する確率が増える
社内サーバに社外から直接アクセスできなければ、中継サーバが必要になる• 社内外間のネットワーク負荷が増大する• DBへの同時接続数の問題が発生する
9

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

大切なことなので何回も言います
思い出しましょう。
データモジュールは、非ビジュアルコンポーネントのコンテナで、たとえば、データアクセスコンポーネントを隠蔽・集中管理することができます。
→ コレを使うと UIとBLを切り分けることができるのです。
10

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UI/BLの分離の利点• テストの範囲が狭くなる– ユニットテストが変更された箇所のみで良くなり、テスト工数が減る• UI• データモジュール• マルチデバイス開発がしやすい– 各デバイス用UIが増えても、UIのみの処理に集中できる11

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UI/BLの分離の注意点• 詰め込まない！
– UIの操作処理をBL側に組み込んだりしない！
– 共通化できるところとできないところの切り分けはしっかりやろう！
– in/outはシンプルに！

•コンポーネントを貼りまくらない！
– データベースのテーブル毎にコンポーネントを全部置いて、しかも最初に全部オープンすると遅い！

• TXXQueryを使う！
– TXXTableを使うと全データを参照するので遅い！
必要なデータのみにアクセスすること。
12

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

使っているとこんな風に幸せになれます• UIの変更のときも• システム拡張のときも• 設計変更(データベース側も含む)のときも最初からデータモジュールを使っておけば、少ないダメージですみます。
UIと BLを分離していると素敵なのです。
13

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

動作イメージを掴んでみましょう

14

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

データモジュールによる拡張しづらさの緩和• １層から２層、３層へ

P
C

単層

デスクトップアプリケーション
BL
UI

TTable/TQueryなど

DB

DBサーバ
P
C

⼆層

デスクトップアプリケーション
BL
UI

TTable/TQueryなど

DB

DataSnapサーバなど

多層

P
C

15

デスクアプリ
UI

モバイ
ルや
Web

DBサーバ

BL
TTable/TQueryなど

DB

モバイルアプリUI

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

BL：ビジネスロジック
UI：ユーザーインターフェイス

データモジュールによる拡張しづらさの緩和
IaaS/PaaSがサービスする範囲
クライアントレイヤー

PC

データレイヤーBLDB

デスクアプリUI

モバイルやWeb

ビジネスロジックレイヤー

モバイルアプリUI

BL：ビジネスロジック
UI：ユーザーインターフェイス

RAD Studioが開発をサポートする範囲
16

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

データモジュールによる拡張しづらさの緩和• 例えば、BDE などからFireDACへ…
PC

デスクトップアプリケーション
BL
UI

PC

TTable/TQueryなど

DB

デスクトップアプリケーション
BL
UI

17

BL：ビジネスロジック
UI：ユーザーインターフェイス

TXXTable/TXXQueryなど

DB

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

拡張しやすい構成の例•

拡張しやすいとは–•

理想は、変更数ゼロ、コードの追加のみで機能追加などができること

設計の例
–––
–

データモジュールを利用する
クラスだけでなく、例外処理などもカプセル化する
データアクセスコンポーネントのアーキテクチャ変更を中間に挟む
メソッド内でオブジェクト参照を付け加える

var
MyMemo: TMemo;begin
MyMemo := Memo1;
MyMemo.Lines.Add(‘AAA’);
MyMemo.Lines.Add(‘BBB’);MyMemo.Lines.Add(‘CCC’);
end;

18

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

構成が異なってもインターフェイスは同じ

工数を比較してみる
規模
設計

製造

テスト

移行

拡張
19

単層/二層

多層小



大





小



大





小



大

小



大

小



大



多層は設計に時間がかかる
多層は製造にも時間がかかる
多層はテストが楽

多層は移行が楽

多層は拡張しやすい

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

実はマルチデバイス対応にも便利なのです…
• VCL + Windows• FireMonkey + Windows/Mac• FireMonkey + Windows/Mac/iOS/Android
20

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

移行プロジェクトでもモバイル開発でも必須！
今からでも間に合うデータモジュール活用法

データモジュール再入門

21

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

作り方・直し方・注意点
さて、そんなデータモジュール。
どんな風に作って使うかをお見せします。
初めての方→新規に作るので見てください
やっちゃった方→新規に作ったものからデータモジュールを使ったものへの変更方法をお見せします– フォームにがんがん貼っちゃっている人でも遅くない！
22

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

参考：テーブルの内容
今回のデモで使うデータはテーブル一つだけです。
右の図はInterBaseの内容ですが、同じデータをXML形式でも用意しています。

同じデータ＝XML

23

InterBase

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

DMを初めて使う方へ(XML)BLUI

TFDXXQueryXML

searchDB()

フィルターした
結果のDataSet

XMLファイルはデザイン時にも利用する
24

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

XML

DMを初めて使う方へ(InterBase)BLUITFDXXQueryDB①デザイン時にはサンプルデータにXMLを用いつつ、②実行時にはデータベースを用いるので開発が楽！

searchDB()

フィルターした
結果のDataSet
25

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

InterBaseやっちまたなーの方へ
やっちまたなー状態
BL/UI/TXXQuery

DB

理想形
BL
UI

InterBase26

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

TXXQueryDBその他：JSONデータのやりとりここでもsearchDB()を用いてフォームとデータモジュールを繋いでいる！

今回のデモでは以下のオープンデータサイトを利用しています
http://www.songsterr.com/a/wa/api

HTTPリクエスト
インターネット

JSON
27

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

サーバー

その他：種類の異なるデータソース間でデータ移行コンポーネント１つで異なるデータソース間でデータを移行できます。

右クリックから「実行」でデータの移行を行えます

XMLInterBase28

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

移行プロジェクトでもモバイル開発でも必須！
今からでも間に合うデータモジュール活用法

まとめ32

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

まとめ• データモジュールは、非ビジュアルコンポーネントのコンテナで、たとえば、データアクセスコンポーネントを隠蔽・集中管理することができます。
→コレを使うと UIとBLを切り分けることができる。
• 「データモジュールが、ロジックとコードを切り分ける初めの一歩として再び重要」
33

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

あとは、、、•リファクタリングはこまめに行うこと– RADの本来の機能を十分に使いましょう– Delphi 2005以降、リファクタリングのための機能が数多くIDEに統合されています•

分離は早めに行うこと– モック作成から分離していると、後々楽できる可能性が高い
例：今回のデザイン時に XMLを使ったパターン– データモジュール内のprocedureの接続先を{IFDEF}で切り替えるなどが可能になる•

複数のバージョンがテストできる環境を用意すること– 仮想環境構築のコストは極端に下がっています– 実機よりも仮想環境(E2,Azureなど含む)を使うことで、確実な検証ができます

34

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ご静聴ありがとうございました
山本のメルマガ登録はこちらから！
http://services.dreamhive.co.jp/regist_mm

35

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Thank you!