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
7.1k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか #sekkeinight
Akira Suenami
June 14, 2022
More Decks by Akira Suenami
See All by Akira Suenami
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
9
2.6k
オブジェクト指向考古学 〜人類は再びDCIの夢を見るか〜
a_suenami
5
3.6k
値と属性の話
a_suenami
0
320
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
1
1.6k
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
a_suenami
2
3.4k
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi
a_suenami
0
4.1k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #bpstudy
a_suenami
4
1.5k
ドメインモデルのつくり方 #5000dai
a_suenami
16
5k
ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ #builderscon
a_suenami
46
12k
Other Decks in Technology
See All in Technology
ハーレムエンジニアリング
kazuma777777
0
140
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.7k
同じWAFが、攻撃の“形”は弾く── 正当な“形”の不正は通す
kuroneko13
0
170
LanceDB入門
mocobeta
7
410
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
290
TypeScript入門 2026
recruitengineers
PRO
3
570
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
260
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
6
1.5k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.2k
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
520
エンジニアに許された特別な時間の終わり
watany
108
250k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Designing for Timeless Needs
cassininazir
1
440
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
460
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
A Soul's Torment
seathinner
6
3.4k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
KATA
mclloyd
PRO
35
15k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
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 ではロールという概念を導入して、オブジェクト間のコラボ レーションを実現する
ご清聴ありがとうございました。