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
CleanArchitecture23章&24章
Search
ssknnm
November 18, 2020
Technology
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CleanArchitecture23章&24章
CleanArchitectureの23章と24章です
ssknnm
November 18, 2020
More Decks by ssknnm
See All by ssknnm
CleanArchitecture_31章_32章.pdf
ssknnm
0
110
CleanArchitecture17章&18章
ssknnm
0
240
CleanArchitecture第5章&第6章
ssknnm
0
120
Other Decks in Technology
See All in Technology
hackers_champloo_2026_tidb
makocchi
0
160
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
Refining Active Record
shugo
0
150
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
430
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
110
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
130
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
340
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
570
go-sqletch
moznion
0
140
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
Featured
See All Featured
Practical Orchestrator
shlominoach
192
12k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
The SEO identity crisis: Don't let AI make you average
varn
0
590
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Code Review Best Practice
trishagee
74
20k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Amusing Abliteration
ianozsvald
1
350
Art, The Web, and Tiny UX
lynnandtonic
304
22k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
630
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
RailsConf 2023
tenderlove
30
1.6k
Transcript
CleanArchitecture 23章&24章 Sasaki
23章 プレゼンターとHumble Object プレゼンターはHumbleObjectパターンの一つであり、アーキテクチャの教会の特定と保 護に役立つものです。
HumbleObjectパターン HumbleObjectパターン‥UTしにくい振る舞いとしやすい振る舞いを分離するために生 み出されたデザインパターン Humble‥意味:控えめ。テストが難しい振る舞い。 HubmleObjectから取り除かれたテスト‥テストしやすい振る舞い。
プレゼンターとビュー View‥HumbleObjectパターン。→コードをシンプルに保っておく必要がある。 ViewModelからデータを読み込み画面に移動させる以外仕事がない。 Presenter‥テスト可能なオブジェクト。アプリからデータを受け取りViewに適切なオブ ジェクトを送る役割がある。表示させたいデータはViewModelに配置する。
テストとアーキテクチャ 境界の定義 = テストしやすい部分 | しにくい部分が分かれている ここではPresenterとViewもそうした境界で分かれている
データベースゲートウェイ • DBに対して実行する作成・読み取り・更新・削除全てのメソッドを含んだポリモー フィックインターフェイス。 • データベースのレイヤーのあるクラスで実装する。(HumbleObjectである) インタラクター • ビジネスルールを含んでいる。 •
Humbleではない。テスト可能。 • ゲートウェイをスタブなどに書き換えることができるため。
データマッパー Q.HibernateのようなORMはどのレイヤー? A.データベースのレイヤー データ構造はユーザーの観点から見えない。ORMは振る舞いを持たないデータの集合 体であるため「データマッパー」と呼ぶ方が適切。 RDBから取ったデータをデータ構造に当てはめる。 結論:ORMはゲートウェイインターフェイスとデータベースの間にHumbleObjectの境界 を作るものである。
サービスリスナー アプリが他のサービスと通信を行う、アプリがサービスを提供する場合にHumbleObject パターンがサービスの境界を作成する。 インターフェイス→リスナー→データをフォーマット→サービス境界を超えて→アプリに データ構造を戻す。
23章のまとめ アーキテクチャの境界にはHumbleObjectパターンが潜んでいる。 境界にはテストしやすい・しにくい部分に分割する。 ↑うまく利用するとシステム全体のテスト容易性が大幅に向上する。
24章 部分的な境界 悩み:本格的なアーキテクチャの境界はコストが高い 解決策:確かに違反している。だがあとで必要になることもある。と考える。 →部分的な境界を実装する。(あとで必要になるかもって部分のことだと思う) 〜アジャイルコミュニティの言葉〜 You Aren’t Going to Neet
Id. (YAGNI)
最後のステップを省略する 部分的な境界の構築方法:独立してコンパイルやデプロイが可能なコンポーネントを準 備→それらを同じコンポーネントにまとめる。 FitNesseの例 ユーザーが他のjarを探したりバージョンの互換性を気にすることなく一つのjarをダウン ロードするだけで実行できるようにした。 危険性:時間だたつとウェブコンポーネントが必要なくなってきた。そしたらウェブとWiki の分離が弱くなり、今では両者を再度分離することが面倒になってきた。
片方だけの境界 Strategyパターン‥将来のアーキテクチャの境界の準備。 ClientからはServiceBoundaryインターフェイスを使用し、 ServiceImplに実装されている。 目的:クライアントをServiceImpl から分離するため。
Facade クライアントからアクセスできないクラスにサービス呼び出しを行う。 ただしClientは全てのサービスくらすに依存しており、Serviceのコードを変更するたびに Clieantの再コンパイルも必要になる。。。
まとめ 24章で紹介した部分的な境界は最終的に完全な境界に至るまでの代理として特定の状 況では適切である。 アーキテクチャの境界をいつどこに作るのか、それは完全な境界なのか部分的な境界な のかを決めるのはアーキテクトの役割である。