Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
さいきょうのレイヤードアーキテクチャについて考えてみた
Search
y_ahiru
January 31, 2025
Programming
1.2k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
さいきょうのレイヤードアーキテクチャについて考えてみた
吉祥寺pm 37 での登壇資料です
https://kichijojipm.connpass.com/event/339040/
y_ahiru
January 31, 2025
More Decks by y_ahiru
See All by y_ahiru
恣意性から考える、変更に強いモデルの作り方
yahiru
1
2.8k
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
10
3.2k
フロントエンドエンジニアも知っておきたい HTTP/3 で変わること
yahiru
16
13k
ゆるふわCQRS入門
yahiru
2
850
設計におけるソリューションドメイン
yahiru
3
1.9k
PHPで始めるGitHub Actions
yahiru
1
890
5ヶ月でカバレッジを20%から90%にあげた話
yahiru
2
7.1k
入門ミューテーションテスト/ A bigginer's guide to Mutation testing
yahiru
0
1.7k
Eloquentに別れを告げるタイミングについて考えた
yahiru
2
2.2k
Other Decks in Programming
See All in Programming
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
11
2.1k
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
390
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.1k
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
180
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
210
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
290
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
1
330
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
170
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
7
5.1k
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
440
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
140
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
460
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.5k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
310
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Optimising Largest Contentful Paint
csswizardry
37
4k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
A Modern Web Designer's Workflow
chriscoyier
699
190k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
310
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Rails Girls Zürich Keynote
gr2m
96
14k
Transcript
さいきょうのレイヤードアーキテクチャ について考えてみた 吉田あひる @吉祥寺.pm37
名前: 吉田あひる (@strtyuu) 仕事: エンジニア 所属: スターフェスティバル株式会社 自己紹介
なぜこんな話をしようと思ったのか
ビジネスロジックをドメイン層に実装 するって正しいんだっけ?
なぜそんな疑問を持ったのか • ドメイン層は大体一番下の層として配置されている • ドメイン層にビジネスロジックを実装するという話はよくきく • でも、ビジネスロジックって普通変わっていくもの ◦ 少なくとも、ビジネスロジックと言われるものの中には安定度の低いものがあるはず •
安定度の低いビジネスロジックがドメイン層に入っているのは影響範囲が広くなりがちであまり嬉しくない んじゃないか?
ぼくのかんがえた さいきょうの解決策
変更要求がきたら
ドメイン層の手前で吸 収できると理想なの では?
どうすればドメイン層の手前で 変更要求を吸収できるか?
ノーコードツールが参考になるのでは? • コードを書かなくとも簡易的なアプリケーションを作成できるすごいやつ
ノーコードツールはドメインモデルをいじらない • ノーコードツールを使ってビジネスや業務を回している企業がある • ノーコードツール自身はそれらの企業のビジネスはよく知らない • これはノーコードツールを使ってユーザー自身がビジネスロジックを記述しているような状態 • こうなると、ビジネスロジックに変更があってもドメイン層をいじる必要が全くない
なぜノーコードツールは安定しているのか? • 個別のビジネス的な要件が削ぎ落とされることからドメインモデルの安定性は生まれているのではない か? • ユーザー自身のドメインモデルの使い方で振る舞いを調整できるからじゃないか?
とはいえノーコードツールを目指せばいいわけではない • ノーコードツールは1企業からみると包含する範囲が広すぎる ◦ 抽象度が高すぎて必要な情報の欠落や必要以上の認知負荷上昇につながってしまう • 対象のドメインをちょうど包含できる抽象が良い抽象 ◦ 自社の要求の範囲で抽象化されたドメインモデルを目指していく必要がある
ノーコードツールの話をまとめると ... • 個別のビジネス要件をドメインモデルから追い出し抽象化することで安定性が高まる • しかし、何でも抽象化してしまうと抽象度が高くなりすぎて辛い
安定度の低いビジネスロジックだけド メインモデルから追い出せばいいので は?
どうやって追い出すのか?
共通性・可変性 • 対象となる物事の中で共通する部分としない部分 • 共通性は静的な構造 ◦ 可変性を受け入れる枠組み • 可変性は動的 •
詳しくはマルチパラダイムデザインという書籍で
お弁当で考えてみる • 共通性 ◦ 商品名と価格からなる データ構造 • 可変性 ◦ 具体的な商品名や価格と
いった状態
PHP で表現してみる • 共通性はクラスという静的な形 で表現 • 可変性は変数として表現
PHP で表現できる共通性・可変性(一部) デザインパターンなどは更に様々な共通性・可変性を表現できる ※実際には共通性・可変性の他にバインディング時期など他にも考慮するポイントがある 共通性 可変性 機能 振る舞い・データ構造 状態 Class
名前(意味) or 振る舞い 振る舞い or 実装 Interface 振る舞い 型 Trait データ構造 小さい値の組 Enum
要件を可変性で捉えて ビジネスロジックを抽象化してみる
申請アプリケーションの例 • スターフェスティバルはお弁当を販売する ECサイトを運営している • ECサイトに並ぶお弁当は外部の飲食店のものも含まれる • クオリティ担保のため、社内の審査を通過したお弁当だけを ECサイト上に並べている •
商品情報を審査をするためのアプリケーションを構築したい • 「3次審査までできるようにしてほしいです!」
3次審査という要件を 共通性で実装する例 3次審査以外のバリエーションを考慮し ないため、三次承認までのステータス を静的に表現する
3次審査という要件を 可変性で実装する例 2次審査までの申請など承認ステップ のバリエーションを仮定し、動的に表現 したバージョン
ドメインモデルに可変性を組み込む • 要件を可変性として捉えることで、ドメインモデルの抽象度が一段上がる • 可変性のスコープ内の変更要求であればドメインモデル自体の変更が不要になる • ドメイン層に変更を加えなくても変更要求に対応できる状態に少し近づいた?
YAGNI との付き合い方 • kawashima さんの素晴らしい資料に沿ってやっていくと良さそう ◦ 「それはYAGNIか? それとも思考停止か ?」 https://www.slideshare.net/kawasima/yagni
◦ 変更要求が発生したタイミングなどで変更の発生した部分を可変性に切り出していくといいのではないか • 何でも可変性にしていくと抽象度が高くなりすぎる可能性 • ユースケースの幅が広がりそうなところを可変性にすると面白いことになるかもしれない
可変性についてもっと知りたい人は • マルチパラダイムデザイン • データモデリングでドメインを駆動するという書籍で紹介されている ◦ テーブル駆動方式 ◦ DSL ◦
定義体方式
まとめ • 安定度の低いビジネスロジックをドメイン層に入れると、影響範囲が広くなりがちで辛いのではないか • 安定度を高めるためにはビジネスロジック自体の抽象度を上げていく必要があるのではないか • 要件を可変性で捉えることでドメインモデルの抽象度が上がっていくのではないか • ドメインモデルに可変性を組み込んでいくことで、変更要求をドメイン層の手前で吸収できることが増える のではないか
• そうなるとさいきょうのレイヤードアーキテクチャ感があるのではないか
We are hiring !!