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
66
recommended-collection-object.pdf
rirazou
September 20, 2019
Tweet
Share
More Decks by rirazou
See All by rirazou
DDD実践のFB
rirazou
0
36
Other Decks in Programming
See All in Programming
歴史と現在から考えるスケーラブルなソフトウェア開発のプラクティス
i10416
0
290
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.3k
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
280
Flatt Security XSS Challenge 解答・解説
flatt_security
0
670
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
4
1.1k
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
910
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
140
Оптимизируем производительность блока Казначейство
lamodatech
0
930
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
270
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
380
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
380
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
240
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1030
460k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Building Adaptive Systems
keathley
38
2.3k
Six Lessons from altMBA
skipperchong
27
3.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
2
160
Embracing the Ebb and Flow
colly
84
4.5k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
560
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
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 コレクションオブジェクトとは何か? コレクションを素のまま扱う事の問題点 コレクションオブジェクトが解決すること 実装について