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
61
recommended-collection-object.pdf
rirazou
September 20, 2019
Tweet
Share
More Decks by rirazou
See All by rirazou
DDD実践のFB
rirazou
0
33
Other Decks in Programming
See All in Programming
エラーレスポンス設計から考える、0→1開発におけるGraphQLへの向き合い方
bicstone
5
1.5k
rbs-inlineを導入してYARDからRBSに移行する
euglena1215
1
290
unique パッケージから学ぶ interning と weak reference @ Asakusa.go#3
karamaru
2
810
Rubyとクリエイティブコーディングの輪の広がり / The Growing Circle of Ruby and Creative Coding
chobishiba
1
270
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
550
ドメイン駆動設計を実践するために必要なもの
bikisuke
4
330
Swiftコードバトル必勝法
toshi0383
0
170
Developer Joy == Developer Productivity (really!)
hollycummins
1
220
全部見せます! クラシルリワードのSwiftTesting移行プロジェクト
uetyo
0
210
Kotlin 2.0 and Beyond
antonarhipov
2
150
o1モデルのプロンプトエンジニアリングって?
ktc_wada
0
290
Go1.23で入った errorsパッケージの小さなアプデ
kuro_kurorrr
2
400
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
93
5.1k
Fireside Chat
paigeccino
31
2.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
58k
How to Think Like a Performance Engineer
csswizardry
16
960
Optimizing for Happiness
mojombo
375
69k
Testing 201, or: Great Expectations
jmmastey
36
7k
Gamification - CAS2011
davidbonilla
79
5k
4 Signs Your Business is Dying
shpigford
179
21k
A Modern Web Designer's Workflow
chriscoyier
692
190k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
363
22k
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 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について