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
71
recommended-collection-object.pdf
rirazou
September 20, 2019
Tweet
Share
More Decks by rirazou
See All by rirazou
DDD実践のFB
rirazou
0
40
Other Decks in Programming
See All in Programming
AHC 044 混合整数計画ソルバー解法
kiri8128
0
300
Devinのメモリ活用の学びを自社サービスにどう組み込むか?
itarutomy
0
1.7k
PHPでお金を扱う時、終わりのない 謎の1円調査の旅にでなくて済む方法
nakka
3
1k
複数ドメインに散らばってしまった画像…! 運用中のPHPアプリに後からCDNを導入する…!
suguruooki
0
430
安全に倒し切るリリースをするために:15年来レガシーシステムのフルリプレイス挑戦記
sakuraikotone
5
2.2k
requirements with math
moony
0
520
コンテナでLambdaをデプロイするときに知っておきたかったこと
_takahash
0
140
remix + cloudflare workers (DO) docker上でいい感じに開発する
yoshidatomoaki
0
120
Go1.24 go vetとtestsアナライザ
kuro_kurorrr
2
460
Denoでフロントエンド開発 2025年春版 / Frontend Development with Deno (Spring 2025)
petamoriken
1
1.3k
私の愛したLaravel 〜レールを超えたその先へ〜
kentaroutakeda
12
3.5k
アプリを起動せずにアプリを開発して品質と生産性を上げる
ishkawa
0
220
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Testing 201, or: Great Expectations
jmmastey
42
7.4k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.5k
Code Review Best Practice
trishagee
67
18k
How GitHub (no longer) Works
holman
314
140k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.1k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Mobile First: as difficult as doing things right
swwweet
223
9.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
We Have a Design System, Now What?
morganepeng
51
7.5k
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 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について