$30 off During Our Annual Pro Sale. View Details »
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
78
recommended-collection-object.pdf
rirazou
September 20, 2019
Tweet
Share
More Decks by rirazou
See All by rirazou
DDD実践のFB
rirazou
0
46
Other Decks in Programming
See All in Programming
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
270
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
200
エディターってAIで操作できるんだぜ
kis9a
0
730
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
180
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
140
マスタデータ問題、マイクロサービスでどう解くか
kts
0
100
認証・認可の基本を学ぼう後編
kouyuume
0
240
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
110
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
730
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
AIコーディングエージェント(Manus)
kondai24
0
190
Featured
See All Featured
Side Projects
sachag
455
43k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
We Have a Design System, Now What?
morganepeng
54
7.9k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
A Tale of Four Properties
chriscoyier
162
23k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How STYLIGHT went responsive
nonsquared
100
6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
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 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について