2009-11-20 devlove 2009 db勉強会

Post on 07-Nov-2014

1.890 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

DevLOVE 2009.11

http://jiemamy.org/

DevLOVE DB勉強会

「DBも、進化せよ。」都元ダイスケ

2009.11.20

DevLOVE 2009.11

自己紹介•都元ダイスケ•はてなid:daisuke-m

•twitter @daisuke_m

•Jiemamy Projectチーフコミッタ

Javaオブジェクト指向 Eclipse酒ライセンス

Maven OSGiXML

Android

JiemamyDDD

SQL

ER

DevLOVE 2009.11

今日のポイント

•Jiemamyとは何なのか?

•どういう考えに基づいているのか?•「環境と戦う」とは何なのか?

DevLOVE 2009.11

Agenda

•Jiemamyについて

•Jiemamy開発モデル

•Jiemamyモデルエディタ

•Jiemamy APIのご紹介

•その他

DevLOVE 2009.11

って何さ。

DevLOVE 2009.11

モデリングツール?

DevLOVE 2009.11

モデリングツール?NO!

DevLOVE 2009.11

開発モデルは

DevLOVE 2009.11

Martin Fowler

DevLOVE 2009.11

DBの進化的設計Evolutional Database Design

— Martin Fowler, 2003

DB設計も早い時期にフリーズできない  進化を前提にした設計をしよう

DB構成情報はスキーマだけではない  データも重要な管理対象である

計画的設計

DevLOVE 2009.11

•目指すはDBの進化的設計•それを補助するツール•Jiemamyモデルエディタ

•maven plugin, その他(いろいろ企画中)

•副産物的に出来たAPI公開(β)

DevLOVE 2009.11

進化的設計Smart

VersionControl

SmartModel

SmartBuild

DevLOVE 2009.11

Smart Build

A

DevLOVE 2009.11

従来の問題点•WebアプリがSVNに置いてある。このアプリを無事に起動できますか?DBの

インストール

DBの設定整備

スキーマ構築

アプリケーションに対するDB情報の

設定

ドキュメントがない or よくわからない

手順はどこに書いてあるの?

DevLOVE 2009.11

環境と戦う•アプリは環境の中で動く•アプリの制御下にない前提条件•環境変数•Javaランタイム

•DBサーバ・APサーバ

•自動化、または文書化(documented)

DevLOVE 2009.11

Maven•Apacheによる、ビルドツール

•coしたらpom.xmlがあるディレクトリで

"mvn package"コマンド実行

•プロジェクト構成・ビルド手順の標準化

スマート・ビルド

DevLOVE 2009.11

明日からできること•アプリが、どんな環境でも、チェックアウトしたら1コマンドでビルドでき、そのまま実行できる環境を整備せよ。

•1コマンドが無理なこともある。ただし、その場合は documented を意識せよ。

•README.txtを置く、など。

DevLOVE 2009.11

Jiemamyでは•maven-jiemamy-pluginを提供

•pom内にスキーマ情報ファイルと適用先DB情報を明記

•ビルドの一環としてDBも整備する

•Webアプリのビルド完了と共にDBも完成

•今後、Antタスク等も提供したい

DevLOVE 2009.11

SmartVersion Control

B

DevLOVE 2009.11

構成の同期

•各アプリケーションのrevisionには対応するDB構成がある

•アプリだけ過去に戻せても全く意味がない

•全てのリビジョンを、後から呼び出して動かせるように

アプリケーション

アプリケーション

アプリケーション

アプリケーション

DB構成

DB構成

DB構成

rev1000

rev1001

rev1002

rev1003

rev1004

rev1005

アプリケーション

DB構成

DevLOVE 2009.11

明日からできること

•アプリだけではなく、環境(を再現するための情報)もコミットせよ。

•前提環境が変わるとアプリも変わる。アプリだけをコミットせず、環境と同期したコミットを心がけよ。

DevLOVE 2009.11

Jiemamyでは

•ツールの補助は無い(無理w)•プラクティスを提唱(再掲)•環境再現手段もコミットせよ。•アプリと環境情報を同期コミットせよ。

DevLOVE 2009.11

Smart Model

C

DevLOVE 2009.11

DRY原則

•情報の重複を防ぐ考え方•情報の重複は...

•変更の困難さが増大•透明性を低下•不一致(不整合)の可能性が増大

Don't Repeat Yourself.

DevLOVE 2009.11

1つの事実を1箇所に•複数箇所で1つの事実を表現しない

class Emp { String name; Dept dept;}

class Dept { String name; List<Emp> members;}

DevLOVE 2009.11

2箇所で持っている例•「加藤さんは技術部に所属している」

Dept tech = new Dept("技術部");Emp kato = new Emp("加藤");kato.setDept(tech);tech.addMember(kato);

DevLOVE 2009.11

DB構成情報の種類• DB初期化の為の情報

•データ重要!

•表現手段は?

• SQLファイル

• ER図

• DB設計書

テーブル

1

関連(外部キー)

2初期データ

3

DevLOVE 2009.11

開発フェーズ

ビルドフェーズ

DBモデリング

プログラミング

構成管理

コミット

チェックアウト

コンパイルデプロイ(配備)等by Maven2

DBServer

SQL等

Repo-sitory

Source Package AppServer

DevLOVE 2009.11

DB構成情報•具体的に何を管理する?

SQLファイル

ER図データ(バイナリ)

…両方?

アプリケーション

アプリケーション

アプリケーション

アプリケーション

rev1000

rev1001

rev1002

rev1003

rev1004

rev1005

アプリケーション

ER図データ

ER図データ

ER図データ

ER図データ

SQL

SQL

SQL

SQLDRY違反

スマートビルド妨害

編集困難

DevLOVE 2009.11

明日からできること•DRYを心がけよ。

•ただし、あくまでも「原則」は「原則」•従えない場合は、注意深く違反せよ。•違反した場合、documentedを忘れるな。

•仮にERとSQL両方コミットする場合

•正副関係を明確にする•同期していない可能性を念頭に置く

DevLOVE 2009.11

Jiemamyでは

DevLOVE 2009.11

JiemamyModel

DBServer

SQL等

Repo-sitory

Source Package AppServer

開発フェーズ

ビルドフェーズ

DBモデリング

プログラミング

構成管理

コミット

チェックアウト

コンパイルデプロイ(配備)等by Maven2

DevLOVE 2009.11

Jiemamyモデルとは•唯一の(DRYな)DB情報記述場所

•これを元にSQL, DB設計書(予定)等の派生リソースを生成できる

•実体はXMLファイル→SVNコミットする

•マージの可能性を考慮•そこそこの可読性が必要

DevLOVE 2009.11

補助ツールJiemamyモデルエディタ

DevLOVE 2009.11

XML…•かといって手書きでXML編集は基本的に嫌

•ならばGUIによるER図エディタを提供

•ちなみに、手編集(マージ時等)にも対応•XML Schemaを提供

•XMLエディタによる補完・validation

DevLOVE 2009.11

Jiemamyモデルエディタ

•よくあるER図エディタ

•AmaterasERD, Clay, DBDesigner4,

ERWin, SI Object Browser, JUDE...

•Jiemamy開発モデルを強力にサポート

•データファイル形式を考え抜いた

DevLOVE 2009.11

Demoせっかくなので

DevLOVE 2009.11

Jiemamy API

DevLOVE 2009.11

Jiemamy Model/API•Jiemamyモデルを自由に操作できる

database

tablecolumn

Javaコードから操作

Java object

SQL

β

DevLOVE 2009.11

XML → Java model

•Jiemamyインスタンスを作って

•シリアライザを取得して•InputStreamから読み込む

DevLOVE 2009.11

Java model → XML

•同じくJiemamySerializerを使って

•OutputStreamに書き出す

DevLOVE 2009.11

Java model → SQL

•SqlExporterをnewして

•設定オブジェクトを作って•exportModelする

DevLOVE 2009.11

実DB → Java model

•DatabaseImporterをnewして

•同じように設定オブジェクト作って•importModelする

DevLOVE 2009.11

Javadoc完備!

DevLOVE 2009.11

これ使ったら•色々面白い事できそうじゃないですか?•初回起動時に(ServletFilter辺りを使って)

自動でDB整備するWebアプリとか

•Smart Install / Update

•動的にテーブルをCREATE/DROPする

Webアプリとか

DevLOVE 2009.11

地豆も進化を続けます•Jiemamyでアプリの進化的設計を。

•そしてJiemamyも進化します。

•まだ未熟なのでAPIは今後変わっていく

•XML形式も変わる予定(converter提供予定)

•今後ともよろしくお願いします。

DevLOVE 2009.11

http://jiemamy.org/

ご静聴ありがとうございました

Evolutional Database Design...

top related