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
秘伝のタレ.pdf
Search
SatoshiN
May 28, 2019
0
26
秘伝のタレ.pdf
SatoshiN
May 28, 2019
Tweet
Share
More Decks by SatoshiN
See All by SatoshiN
開発スピード向上Tipsその2.pdf
satoshin303
0
51
担当しているiOSアプリを全部作り直す開発中に_いろいろ半自動化した事_簡易版.pdf
satoshin303
0
70
GitHub小技集.pdf
satoshin303
0
29
iOS_DC_2018_参加レポート.pdf
satoshin303
0
26
量子コンピュータ_の仕組みとQ_.pdf
satoshin303
0
200
モバイルアプリ_開発スピード向上Tips.pdf
satoshin303
0
24
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
890
Typedesign – Prime Four
hannesfritz
42
2.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
A better future with KSS
kneath
239
18k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Being A Developer After 40
akosma
91
590k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Designing for Performance
lara
610
69k
Context Engineering - Making Every Token Count
addyosmani
8
310
Side Projects
sachag
455
43k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Transcript
秘伝のタレ
自己紹介 佐藤慎 (さとしん) Twitter @satoshin2071 GitHub https://github.com/SatoshiN303 最近の趣味 肩甲骨はがしなど ストレッチ全般
2019上半期 買って良かったもの
アジェンダ • はじめに • 立ちはだかる秘伝のタレを味わう • 秘伝のタレを生み出さないために • 秘伝のタレを紐解く・改善案を出す •
まとめ
はじめに 各社 新卒も入ってきたタイミングかと思いますが エンジニアならいつかは遭遇する確率の高い (実際に私が遭遇した) 秘伝のタレの話をします。
受託案件あるある 過去に実装した ソースコードを元に 「機能を追加して再リリース」 「フルスクラッチで作り直して再リリース」 Web, モバイル, インスタレーション, どんな案件でも誰しもいつかは遭遇するかと思います。
(立ちはだかる) 秘伝のタレ
秘伝のタレは会社や個人に悪循環を発生させます • 修正する場合の工数が増える • 大規模改修が許されない状況では暫定的な修正しかできなく なる • だんだん飽きてくる • だんだんその案件から離れたくなる
• だが新しい案件に関われない状況が続いたら? • テンション下がりきる • そして退職へ…
秘伝のタレを解きほぐしてみる
まずは秘伝のタレの特徴を抽出する • 非同期処理の完了通知にNSNotificationCenter • 一つのViewController や ◯◯Manager に複数の責務 • 同じ責務の処理がバラバラに管理
• MethodSwizzlingなど黒魔術の利用
まずは秘伝のタレの特徴を抽出する • 非同期処理の完了通知にNSNotificationCenter • → 可読性低下・複雑性循環 • 一つのViewController や ◯◯Manager
に複数の責務 • → 責務肥大化 • 同じ責務の処理がバラバラに管理 • → 一貫性のなさ • MethodSwizzlingなど黒魔術の利用 • → 標準的な方法からの逸脱
イメージ
ただし状況によっては最適なケースもある • 非同期処理の完了通知にNSNotificationCenter • → 小規模で設計がMVCなら有り • ViewController や ◯◯Manager
に複数の責務 • → 小規模・納期短い場合 なら有り • 同じ責務の処理がバラバラに管理 • → 逆に極端な再利用を考えると実装スピード落ちる • MethodSwizzlingなど黒魔術の利用 • → 黒魔術使ったほうがいい場合なら有り
設計選択の簡易フローチャート (フルスクラッチ版) 目的達成を 最優先で 最低限責務 (例 MVC) 小規模責務 (例 MVP)
中規模責務 (例 VIPER) 大規模責務 (例Clean Architecture) 納期の余裕 案件の規模 継続開発見込み 納期の余裕 ネガティブ ポジティブ
私が引き継いだ案件は大規模案件に該当 ↓ 設計は最低限規模〜小規模向けだった ↓ 秘伝のタレを少しずつアレンジ
秘伝のタレを紐解く・改善する • 非同期処理の完了通知にNSNotificationCenter • → 可読性低下・複雑性循環 • → 静的解析ツールをビルド毎に走らせる •
→ NSNotificationCenter による完了通知はMVC向きなの で方法を変更。Delegateパターンや closure, Promiseパ ターン, async / await を検討し利用する。
秘伝のタレを紐解く・改善する • ViewController や ◯◯Manager に複数の責務 • → 責務肥大化 •
同じ責務の処理がバラバラに管理 • → 一貫性のなさ • → 静的解析ツールをビルド毎に走らせる • → Clean Architectureを採用。設計レベルで責務を分ける ことで実装者の関心を出来る限り責務分けから離す。設計に 一貫性をもたせる。
参考
秘伝のタレを紐解く・改善する • MethodSwizzlingなど黒魔術の利用 • → 標準的な方法からの逸脱 • → 個人的興味で標準的な方法から逸脱したいときは状況を 見て楽しみましょう。(フローチャート参考)
私もこの間 脱線したあげくに結局直しました…
まとめ • 常に状況を観察して 最適な責務で分ける • 秘伝のタレが立ちはだかったときは大きな問題から一つ一つ 紐解いて 最適解を適用していく • 昨日かいたコードは既に秘伝のタレかもしれない…
参考書籍 プリンシプル オブ プログラミング
エクストリームリーディング会を 定期的に開催してます やってること • その場で全員で同じ項目を読んで疑問点を共有し合うスタイル • コードの「匂い」を嗅ぐ • 設計手法を学ぶ 次回5/31(金)
12-13