uroboroSQLをきっかけに、責務の在り方を考えてみた
by
Sudo Mayu
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
uroboroSQLをきっかけに、 責務の在り方を考えてみた Sudo Mayu
Slide 2
Slide 2 text
自己紹介 須藤 真由(Sudo Mayu) 普段はJavaDoのスタッフ、山川研究室の研究員 学生時代はドメイン駆動設計を研究にしたくらいモデリングが好き 内定先のFuture株式会社でシステム開発アルバイト中 最近、SQLを読むときに参考にしてるもの →postgreSQLユーザー会のドキュメント
Slide 3
Slide 3 text
uroboroSQLとは 2Way-SQLが利用可能なJava製のシンプルなSQL実行ライブラリ フューチャーアーキテクト社内にて、2006-2007年頃に開発 S2Daoを参考にしている 【設計思想】 SQLに足りないところをJavaで補う
Slide 4
Slide 4 text
2WaySQLってほんとに便利 インピーダンスミスマッチ: DBとアプリケーションはレイヤーが異なる データモデルとドメインモデル間には不整合が発生
Slide 5
Slide 5 text
2WaySQLってほんとに便利 インピーダンスミスマッチの解決策 : O/Rマッピング周辺の手法 ・Dynamic SQL ・Query Builder(jOOQ、Querydslなど) ・Specificationパターン/Criteriaスタイル ・一般的なSQL Template ・2WaySQL(uroboroSQL、Domaなど)
Slide 6
Slide 6 text
それぞれの責務の在処を比べてみたい
Slide 7
Slide 7 text
6パターン作ってみた
Slide 8
Slide 8 text
題材 登録されているメンバーから絞り込む アプリケーションはJavaで構築 対象テーブル
Slide 9
Slide 9 text
JDBCのDynamic SQL SQL文字列そのものをJavaコード内で少 しずつ組み立て SQL実行、ResultSetからMemberへの 変換までがJava側に集まっている
Slide 10
Slide 10 text
JDBCのSQLを極力ファイルに切り分け SQLファイルはある 任意条件の有無、IN句の ? 生成、 LIKE値加工、バインド値の順番管理は Java側に残っている
Slide 11
Slide 11 text
Query Builder SQL断片とバインド値の対応を SqlQueryBuilderに寄せて、 Repository側は 「条件があれば追加する」という呼び出しに集中
Slide 12
Slide 12 text
Specificationパターン/Criteriaスタイル 検索条件や業務条件をJavaの 部品として表現 SQLへの反映は Repository側に 寄せる
Slide 13
Slide 13 text
SQL Template Java側は「使うSQLファイ ル」と「渡すパラメータ」を指 定するだけ、 条件分岐やIN句は SQLテンプレート側に寄る。 LIKE用の値加工は 実装方式によってJava側に 残ることもある
Slide 14
Slide 14 text
2WaySQL バインドコメントと ダミー値 (バインドパラメーター) により、 SQLクライアントに 貼り付けて通常のSQL として試しやすい
Slide 15
Slide 15 text
色んな方法があることが 分かりました (勉強になりました。使い方間違ってるとかあったら教えていただきたいです)
Slide 16
Slide 16 text
使い比べてみた感想 ・皆さんどう使い分けてるのか気になる! ・アプリケーション側とデータベース側、 どっちにどんなドメイン知識を置いてどんな責務を担わせるのか プロジェクトやシステムの規模によって様々で答えはないと思うけど、 2WaySQLでその選択肢が増えている!
Slide 17
Slide 17 text
uroboroSQL使ってみた感想 最初にアルバイトのプロジェクトのSQLに触れた時 SQL長い!読むの大変(でも今考えるとuroboroSQLのせいじゃない) グレーアウトしてるのに実行に影響するの不思議 数ヶ月経った後… 3ヶ月くらいから読み慣れてきた感覚 4ヶ月目の今、一番見やすくなってる(最近も500行くらいの書けた) 「書けてもJava」みたいな状態からスタートした私、とてもびっくり
Slide 18
Slide 18 text
増田亨さん:ソフトウェア設計の実践的な考え方 - Speaker Deck
Slide 19
Slide 19 text
それぞれどの領域に合う? Specification/ Criteria SQLTemplate(2WaySQL) 処理を細分化して ドメインモデルを表現可能 複雑な検索・一覧などを、 既存の型やSQLで堅実に表現 JDBC Dynamic SQL、 QueryBuilder 凝った設計よりも 小さく早く済ませることが可能
Slide 20
Slide 20 text
uroboroSQLには便利機能が
Slide 21
Slide 21 text
REPL(Read-Eval-Print Loop) CLIで対話しながらSQLを実行できる 確認できる項目 ・実行するSQL ・バインドパラメータ ・SQL文の中の評価式とその評価結果 ・検索結果 ・実行時間
Slide 22
Slide 22 text
SQLカバレッジ 条件分岐がアプリケーション側にある →アプリケーションのテストで カバレッジ計測 条件分岐がSQLにある →uroboroSQLで測れる! 2WaySQLならではの困りごとに対応
Slide 23
Slide 23 text
uroboroSQL-fmt
Slide 24
Slide 24 text
uroboroSQL-fmt VSCodeの拡張機能
Slide 25
Slide 25 text
uroboroSQL-fmt Web上でデモれる インストール不要
Slide 26
Slide 26 text
モデリングによっても変わるのでは? アプリケーション側のドメインモデリング インピーダンスミスマッチにも程度がありそう DB側のデータモデリング
Slide 27
Slide 27 text
8月29日(土)、JavaDoやります! テーマ:バックエンドのモデリング手法 ゲスト会
Slide 28
Slide 28 text
ありがとうございました アンカンファレンスでもお話しましょう