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
recommended-collection-object.pdf
Search
rirazou
September 20, 2019
Programming
0
86
recommended-collection-object.pdf
rirazou
September 20, 2019
Tweet
Share
More Decks by rirazou
See All by rirazou
DDD実践のFB
rirazou
0
51
Other Decks in Programming
See All in Programming
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
130
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
0
130
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
410
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1.1k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
750
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
480
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
150
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
220
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
260
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
0
280
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.4k
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
150
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
980
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
640
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
180
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
130
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Documentation Writing (for coders)
carmenintech
77
5.3k
Building AI with AI
inesmontani
PRO
1
800
Color Theory Basics | Prateek | Gurzu
gurzu
0
260
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Transcript
コレクションオブジェクトの すすめ 2019/09/20 社内LT @rirazou_ 26ページ 1
自己紹介 • @rirazou_ • 好きな食べ物:寿司、焼き肉、ラーメン、鶏の唐揚げ • 嫌いな食べ物:パクチー • 技術的な興味:開発系は全般的に、最近は設計 •
その他の興味:息子の成長 • 最近のはなし:痩せない(食ってるから) 2
本日のアジェンダ 3 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について
本日のアジェンダ 4 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について
コレクションオブジェクトとは何か? コレクションをラップしたクラスの事 呼び方は二通り - コレクションオブジェクト - ファーストクラスコレクション 5
コレクションオブジェクトとは何か? コレクションとは何か? List、Set、Map、配列などの総称 6
コレクションオブジェクトとは何か? コレクションに関する処理 - 画面側への一覧の出力 - 特定の要素の抽出 - 一部の要素の更新 - 要素の追加や削除
- etc 7
本日のアジェンダ 8 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について
コレクションを素のまま扱う事の問題点 バグの発生率の上昇! 9 ロジックの分散 ロジックの意図の消失 単体テストが困難
コレクションを素のまま扱う事の問題点 ロジックの分散 - MVCで言えば、すべてに出現 - 追加、削除、変更、参照が至る所で行われる - 全貌の把握が困難 - 理解しきれないまま変更や修正
- バグの発生率の上昇! 10
コレクションを素のまま扱う事の問題点 ロジックの意図の消失 - 他の処理に混ざっている - 初期実装時の意図が理解しずらい - 理解しきれないまま変更や修正 - バグの発生率の上昇!
11
コレクションを素のまま扱う事の問題点 単体テストが困難 - 他の処理に混ざっている - コレクションに特化したテストが出来ない - テストコードが不純物にまみれる - エッジケースなどのテスト漏れの上昇
- バグの発生率の上昇! 12
本日のアジェンダ 13 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について
コレクションオブジェクトが解決すること バグの発生率の低下! 14 ロジックの集約 ロジックの意図の 明確化 単体テストが容易
コレクションオブジェクトが解決すること ロジックの集約 - 1つのクラスにロジックがまとまる - 全貌の把握が容易 - 理解した状態で変更や修正 - バグの発生率の低下!
15
コレクションオブジェクトが解決すること ロジックの意図の明確化 - コレクションの操作に特化したメソッド - メソッド名による意図の明確化 - 初期実装の意図を理解した状態で変更や修正 - バグの発生率の低下!
16
コレクションオブジェクトが解決すること 単体テストが容易 - コレクションに特化したテストが可能 - テストコードがシンプルに - エッジケースなどのテスト漏れの低下 - バグの発生率の低下!
17
本日のアジェンダ 18 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について
実装について - ロジックを集約 - フィールドは1つだけ - 可能な限り不変に 19
実装について ロジックを集約 - IF文があるループ処理はメソッドにする - 要素の追加、削除、変更はメソッドにする - 要素数の制限をしていればクラス内でする - フィルタリングしながら表示していればメソッドにする
少しでもロジックがあれば、メソッド出来ないか考える 20
実装について フィールドは1つだけ - 複数必要になったらメソッドの引数で渡すことを検討 - そもそも処理自体を分けることで、不要に出来ないか検討 複数フィールドはクラスの複雑度をUPさせる 1つだけのフィールドはクラスの複雑度を低下させる 21
実装について 可能な限り不変に - 外部にコレクションを渡す時は不変にして返す - メソッドの戻り値は新規オブジェクトで返す - 要素を値オブジェクトにする いつでも同じ状態が保証されれば、考慮すべき点が減る 22
本日のアジェンダ 23 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について
まとめ 24 - コレクションに関する処理は分散する - 分散したロジックは理解を困難にし、 バグの発生率を上昇させる - コレクションオブジェクトを作成し、 バグの発生率を低下させよう!
参考文献・書籍 ThoughtWorksアンソロジー アジャイルとオブジェクト指向による ソフトウェアイノベーション 25 現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法
質疑応答 - 本日のアジェンダ 26 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について