Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か ト...
Search
Akira Suenami
June 14, 2022
Technology
14
6.4k
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか #sekkeinight
Akira Suenami
June 14, 2022
Tweet
Share
More Decks by Akira Suenami
See All by Akira Suenami
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.7k
オブジェクト指向考古学 〜人類は再びDCIの夢を見るか〜
a_suenami
5
3k
値と属性の話
a_suenami
0
240
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
1
1.4k
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
a_suenami
2
3.2k
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi
a_suenami
0
3.9k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #bpstudy
a_suenami
4
1.4k
ドメインモデルのつくり方 #5000dai
a_suenami
16
4.9k
ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ #builderscon
a_suenami
46
12k
Other Decks in Technology
See All in Technology
結局QUICで通信は速くなるの?
kota_yata
6
6.8k
Cloud WANの基礎から応用~少しだけDeep Dive~
masakiokuda
3
110
ZOZOTOWNの大規模マーケティングメール配信を支えるアーキテクチャ
zozotech
PRO
0
350
ユーザー課題を愛し抜く――AI時代のPdM価値
kakehashi
PRO
1
120
Instant Apps Eulogy
cyrilmottier
1
110
React Server ComponentsでAPI不要の開発体験
polidog
PRO
0
260
Strands Agents & Bedrock AgentCoreを1分でおさらい
minorun365
PRO
8
340
[OCI Technical Deep Dive] OracleのAI戦略(2025年8月5日開催)
oracle4engineer
PRO
1
170
LLMで構造化出力の成功率をグンと上げる方法
keisuketakiguchi
0
840
S3 Glacier のデータを Athena からクエリしようとしたらどうなるのか/try-to-query-s3-glacier-from-athena
emiki
0
220
いかにして命令の入れ替わりについて心配するのをやめ、メモリモデルを愛するようになったか(改)
nullpo_head
7
2.6k
AI時代の大規模データ活用とセキュリティ戦略
ken5scal
0
130
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
What's in a price? How to price your products and services
michaelherold
246
12k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Balancing Empowerment & Direction
lara
1
540
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Designing for Performance
lara
610
69k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Transcript
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか 2022/06/14 設計ナイト2022 末並 晃 @a_suenami
タイトルは某絵画のパロディですが あまり深い意味はありません。(念のため)
自己紹介 • 末並 晃 @a_suenami • 生息している界隈: DDDとか、TDDとか、RDBとか • お仕事で使ってる技術スタック:
Rails, React, Java ◦ 最近は terraform おじさんです • 好きな RDBMS: PostgreSQL • 好きな制約: チェック制約 • 好きな焼肉の部位: ハラミ • 好きな(ry
インターネット上での立場
インターネット上での立場 ひたすら焼肉をタカられるという エンターテイメントをインターネットに提供し ています。 (焼肉を奢るとは言ってない)
今日話すことになったきっかけ
今日話すこと • トランザクションスクリプトはどこから来たのか ◦ どういう文脈で語られるようになったのか ◦ そもそも誰が言い出したのか • トランザクションスクリプトは何者か ◦
どんなものがトランザクションスクリプトと言えるのか ◦ どんなものはトランザクションスクリプトと言え“ない”のか • トランザクションスクリプトはどこへ行くのか ◦ トランザクションスクリプトの問題はどのように改善できるのか
トランザクションスクリプトはどこから来たのか • トランザクションスクリプトは『エンタープライズアプリケーション アーキテクチャパターン』(PoEAA) から来ました ◦ 調べてみたけどこれ以前の記述は見つからなかったので、た ぶん PoEAA が初出
• ドメインロジックに関するパターンのひとつとして挙げられている ◦ トランザクションスクリプトの他には、テーブルモジュールとドメ インモデルがある
トランザクションスクリプトの利点 • ほとんどの開発者が理解できるシンプルな手続きモデルである • シンプルなデータソースレイヤーと共にうまく機能する ◦ 行データゲートウェイ ◦ テーブルデータゲートウェイ •
トランザクションの境界をどのように設定するかが明らかである ◦ 入力を受け取り出力を返す一連の手続きがトランザクションを 開くことから始め、閉じることで終了する
トランザクションスクリプトは何者か “プレゼンテーションからの単一のリクエストを扱う各手続きによって ビジネスロジックを構造化する”
トランザクションスクリプトは何者か “単一のインラインプロシージャのコードである必要はない。 一部はサブルーチンに分離され、これらのサブルーチンは 異なるトランザクションスクリプト間で共有することができる。”
ドメインロジックに関するその他のパターン “振る舞いとデータの両方を取り込んだ ドメインのオブジェクトモデル” “データベースのテーブルまたはビューの すべての行のビジネスロジックを 処理する単一のインスタンス”
トランザクションスクリプトとは • トランザクションスクリプトであるかそうでないかは、オブジェクトモ デルであるかどうか…か? ◦ ドメインモデルはレコード(もしくはそれに準ずる概念)に対す る、テーブルモジュールはその集合(≒テーブル)に対する データ抽象と考えることができる • 何故オブジェクトモデルか?
◦ カプセル化・モジュール化 ◦ ポリモーフィズム(多態性)
トランザクションスクリプトはどこへ行くのか
の前に
そもそも何故トランザクションスクリプトで 複雑なドメインロジックを実装するのが難しいのか
トランザクションスクリプトと複雑度 • PoEAA はオブジェクトモデルのほうが優れている前提で論が展 開されている気がする ◦ 単に関心の分離が必要ということであればサブルーチンでよ いはず ◦ 現に、ある一定のレベルまではサブルーチンへの分割によっ
て解決可能だと言っている • 一定以上複雑になった場合には、やはりカプセル化や多態性(ポ リモーフィズム)を実現する仕組みが必要ということだろうか?
ユースケースと状態のもつれ この状態がよく言われる複雑化したトランザクションスクリプト
サブルーチンによる構造化 共通の手続きをまとめ、ロジックの重複を緩和した状態
サブルーチン(を束ねたクラス)の循環依存 サブルーチンをstaticメソッドにして それっぽいクラスにまとめた場合に起こりがち
オブジェクトモデルによる(?)データ抽象 ドメインモデルやテーブルモジュールはこれに近い
サービスレイヤーの導入 サービスレイヤーを導入し 共通の手続きはオブジェクトモデルとは別途共通化
ドメインロジックとアプリケーションロジック “私を含む多くの設計者は、「ビジネスロジック」を2種類に分けるのが好きだ。 「ドメインロジック」は純粋に問題領域に関係するものであり「アプリケーションロ ジック」はアプリケーションの責任に関係するものである。”
DCI 手続き・アルゴリズムの境界とデータの境界は異なり、伝統的なオブジェクト指 向ではそれを共通の機構で実現しようとしている(という問題提起) https://digitalsoul.hatenadiary.org/entry/20100131/1264925022
まとめ • トランザクションスクリプトはどこへ行くのか ◦ 手続きを手続きのまま構造化する ◦ オブジェクトモデルを用いてデータ抽象や多態を用いる • 手続きとデータの境界は異なることがある ◦
ビジネスロジックをドメインロジックとアプリケーションロジック に分け、前者にデータ抽象を、後者に手続きの構造化を ◦ DCI ではロールという概念を導入して、オブジェクト間のコラボ レーションを実現する
ご清聴ありがとうございました。