Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
EN
Upload
Download free for 30 days
Sign in
Uploaded by
Kazuhiro Sakamoto
PDF, PPTX
1,348 views
iOS AntiPatterns & Refactoring
DeNA × Sansan iOS Engineer night 発表資料
Engineering
◦
Read more
2
Save
Share
Embed
Save to Drive
Download now
Download as PDF, PPTX
1
/ 60
2
/ 60
3
/ 60
4
/ 60
5
/ 60
6
/ 60
7
/ 60
8
/ 60
9
/ 60
10
/ 60
11
/ 60
12
/ 60
13
/ 60
14
/ 60
15
/ 60
16
/ 60
17
/ 60
18
/ 60
19
/ 60
20
/ 60
More Related Content
PDF
GREE Tech Talk #4 パネルディスカッション Jenkinsによるテスト自動化の会社への導入
by
gree_tech
12 slides
1.6K views
PDF
A Report on process Assessment for open source projects
by
Kiyoshi Ogawa
28 slides
547 views
PDF
物体検出エラーの分析ツール TIDE
by
GuoqingLiu9
17 slides
543 views
KEY
360iDev iOS AntiPatterns
by
Carl Brown
95 slides
1.8K views
PPTX
Educ 2D
by
novabaring03
12 slides
433 views
PPTX
Facebook Parseの世界
by
maruyama097
260 slides
14.6K views
PDF
Windows 8 sansan 名刺管理
by
Yuki Motoyama
45 slides
1.5K views
PDF
Eight meets Realm
by
Kazuhiro Sakamoto
28 slides
2.8K views
GREE Tech Talk #4 パネルディスカッション Jenkinsによるテスト自動化の会社への導入
by
gree_tech
12 slides
1.6K views
A Report on process Assessment for open source projects
by
Kiyoshi Ogawa
28 slides
547 views
物体検出エラーの分析ツール TIDE
by
GuoqingLiu9
17 slides
543 views
360iDev iOS AntiPatterns
by
Carl Brown
95 slides
1.8K views
Educ 2D
by
novabaring03
12 slides
433 views
Facebook Parseの世界
by
maruyama097
260 slides
14.6K views
Windows 8 sansan 名刺管理
by
Yuki Motoyama
45 slides
1.5K views
Eight meets Realm
by
Kazuhiro Sakamoto
28 slides
2.8K views
Featured
PDF
2024 Trend Updates: What Really Works In SEO & Content Marketing
by
Search Engine Journal
21 slides
1.1M views
PDF
Storytelling For The Web: Integrate Storytelling in your Design Process
by
Chiara Aliotta
39 slides
1M views
PDF
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
by
OECD Directorate for Financial and Enterprise Affairs
21 slides
976.2K views
PDF
2024 State of Marketing Report – by Hubspot
by
Marius Sescu
43 slides
247.5K views
PDF
Everything You Need To Know About ChatGPT
by
Expeed Software
19 slides
261.3K views
PDF
Product Design Trends in 2024 | Teenage Engineerings
by
Pixeldarts
8 slides
106.4K views
PDF
How Race, Age and Gender Shape Attitudes Towards Mental Health
by
ThinkNow
21 slides
78K views
PDF
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
by
marketingartwork
29 slides
108.9K views
PDF
Skeleton Culture Code
by
Skeleton Technologies
28 slides
60.9K views
PDF
PEPSICO Presentation to CAGNY Conference Feb 2024
by
Neil Kimberley
39 slides
66K views
PDF
Content Methodology: A Best Practices Report (Webinar)
by
contently
50 slides
39.3K views
PPTX
How to Prepare For a Successful Job Search for 2024
by
Albert Qian
37 slides
60.7K views
PDF
Social Media Marketing Trends 2024 // The Global Indie Insights
by
Kurio // The Social Media Age(ncy)
96 slides
63.5K views
PDF
Trends In Paid Search: Navigating The Digital Landscape In 2024
by
Search Engine Journal
31 slides
38.1K views
PDF
5 Public speaking tips from TED - Visualized summary
by
SpeakerHub
16 slides
37.6K views
PDF
ChatGPT and the Future of Work - Clark Boyd
by
Clark Boyd
69 slides
87.5K views
PDF
Getting into the tech field. what next
by
Tessa Mero
22 slides
37.9K views
PDF
Google's Just Not That Into You: Understanding Core Updates & Search Intent
by
Lily Ray
99 slides
37.3K views
PDF
How to have difficult conversations
by
Rajiv Jayarajah, MAppComm, ACC
19 slides
40.9K views
PDF
Introduction to Data Science
by
Christy Abraham Joy
51 slides
104.6K views
2024 Trend Updates: What Really Works In SEO & Content Marketing
by
Search Engine Journal
21 slides
1.1M views
Storytelling For The Web: Integrate Storytelling in your Design Process
by
Chiara Aliotta
39 slides
1M views
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
by
OECD Directorate for Financial and Enterprise Affairs
21 slides
976.2K views
2024 State of Marketing Report – by Hubspot
by
Marius Sescu
43 slides
247.5K views
Everything You Need To Know About ChatGPT
by
Expeed Software
19 slides
261.3K views
Product Design Trends in 2024 | Teenage Engineerings
by
Pixeldarts
8 slides
106.4K views
How Race, Age and Gender Shape Attitudes Towards Mental Health
by
ThinkNow
21 slides
78K views
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
by
marketingartwork
29 slides
108.9K views
Skeleton Culture Code
by
Skeleton Technologies
28 slides
60.9K views
PEPSICO Presentation to CAGNY Conference Feb 2024
by
Neil Kimberley
39 slides
66K views
Content Methodology: A Best Practices Report (Webinar)
by
contently
50 slides
39.3K views
How to Prepare For a Successful Job Search for 2024
by
Albert Qian
37 slides
60.7K views
Social Media Marketing Trends 2024 // The Global Indie Insights
by
Kurio // The Social Media Age(ncy)
96 slides
63.5K views
Trends In Paid Search: Navigating The Digital Landscape In 2024
by
Search Engine Journal
31 slides
38.1K views
5 Public speaking tips from TED - Visualized summary
by
SpeakerHub
16 slides
37.6K views
ChatGPT and the Future of Work - Clark Boyd
by
Clark Boyd
69 slides
87.5K views
Getting into the tech field. what next
by
Tessa Mero
22 slides
37.9K views
Google's Just Not That Into You: Understanding Core Updates & Search Intent
by
Lily Ray
99 slides
37.3K views
How to have difficult conversations
by
Rajiv Jayarajah, MAppComm, ACC
19 slides
40.9K views
Introduction to Data Science
by
Christy Abraham Joy
51 slides
104.6K views
iOS AntiPatterns & Refactoring
1.
iOS Anti Patterns &
Refactoring @kazu0620
2.
自己紹介 https://github.com/kazu0620 坂本 和大( @kazu0620
) Sansan株式会社 Eight事業部所属 過去に個人で開発したアプリ - 秘密のアルバム(40万DL!) - にゃんこ(15万DL!)
3.
Anti Pattern?
4.
Anti Pattern • 問題に対する、不適切な解決策を分類したもの •
今日はiOSの開発でよくある10のBad Partsを 分類してご紹介します。
5.
Example No.1 UITableViewCellを継承したクラスの初期化処 理です。 Exampleは、Objective-Cというイケてる言語 で書かれています。 前提
6.
Example No.1 Anti Patternがいくつあるか考えてみましょう。 (20秒)
7.
Anti Pattern 1 無意味な変数名の省略
8.
何が問題なのか? • 一時変数ならまだ良いが、インスタンス変数や寿命が長い変 数ならば前後の文脈から意味を推測する必要が出てくる。 • そもそも、省略するメリットは現在の開発環境ではほぼない。
9.
Cocoa向けコーディングライン (by Apple) • 「使って構わない略語や頭文字」も記述して くれている。
10.
Example No.1
11.
Anti Pattern 2 マジックナンバー
12.
何が問題なのか? • 実装を読まないと何を意味するのかが理解できない。 • IDEで補完することもできない。 •
誤って別の数値を指定しても気付きづらい
13.
Refactoring • 定数やEnumを利用して定義しましょう。 • 放置せず見つけたときに変更するべし。
14.
Example No.1
15.
Anti Pattern 3 コードでViewをゴリゴリ書く
16.
何が問題なのか? • 増え続ける多様なデバイスへの対応へのコスト • ビルドしないとその座標が意図通りか確認できない •
今時のAutoLayoutは結構優秀
17.
Refactoring • Storyboadに移行する。慣れてみると Storyboad+AutoLayoutの方が大体の場合楽でした。 • 経験上、動的に表示を変更するという要件でも、frameをゴリ ゴリ操作するよりも最小限のConstraintをIBOutletで接続し て必要な制約だけ変更する方が楽。 •
しかし明らかに割りに合わない時は、仕様上の大きな変更など、 replaceできる機を待つのもアリ
18.
Example No.1
19.
Anti Pattern 4 過剰な責務
20.
• 何者にでもなることができるスゴイCell 何が問題なのか?
21.
• DetailCellは、状況に応じて何でも表示している
22.
• どうしてもコードの見通しが悪くなる(永遠と続く case文やif分岐) • 新しい振る舞いを追加するとき、変更が必要な箇 所が散らばる •
変更時にデグレが発生するリスクが高くなる。と いうか実際デグレる。 何が問題なのか?
23.
Refactoring • 振る舞いごとにClassに切り分けられないか検討 する
24.
Example No.1
25.
Anti Pattern 5 責務が限定的でないクラス名
26.
• 抽象的すぎる名前 • 何を責務としているのか見てもわからない •
本来意図した責務以外の処理を実装されるリ スクもある(さっきの過剰な責務の話) 何が問題なのか?
27.
Refactoring • 責務を限定した名前にリネームする。 • CardDeleteCellなど •
リネームしてビルドを通せば良い • リスクなく簡単に修正できる
28.
僕がこのコードから見つけた Anti Patternは5つでした!
29.
俺はもっとたくさん見つけたぞ! って方は懇親会で教えてください!
30.
Example No.2 どこがAnti Patternなのか考えてみましょう。 (3秒)
31.
Example No.2 どこがAnti Patternなのか考えてみましょう。 (3秒)
33.
Anti Pattern 6 Fat
View Controller
34.
MVCパターンの一例
35.
Fat Controllerの例
36.
何が問題なのか? • 規模が小さいうちは良いが、Fatになるほどにメ ンテナンスや機能追加の難易度が上がる • Modelが存在しない(or薄い)ので、状態の管理や 監視の実装がどうしても複雑かつ見通しが悪くなっ てしまう(Model
= NSDictionaryなど)
37.
Refactoring 「Objective-C プログラミングの概念」 より •
ModelとViewを仲介する処理 • LifeCycleの管理 以外の処理は別クラスへの切り出しを検討すべき
38.
Refactoring Modelを切り出す • NSDictionaryで情報 /
状態を持つコードはメンテナン スがツラい • Controllerからビジネスロジックを剥がすことが出来る • 複数のViewControllerで共通のModelを利用できる
39.
Refactoring Viewを切り出す • 割とシンプルなViewならStoryBoadでコード無しで作れる • 必要なUIViewを継承したCustom
Viewを作る • 演出のためのアニメーション等複雑な処理を ViewControllerから剥がすことが出来る
40.
Refactoring その他のリファクタリング • TableViewやCollectionViewはDataSourceDeleagteを別クラス に切り分けできないか検討する • チュートリアル
/ ガイダンスの状態管理などはそれのみを責務としたクラ スなどに分けることを検討する • 複数のModelに対して複雑なデータ操作をしている場合などは、 Serviceクラスに切り分けできないか検討する
41.
今回紹介したクラスは、フィード表示と いう複雑な処理を追加実装しましたが…..
42.
リファクタリングした結果、コード量 は逆に500行程度にまで減りました。
43.
その他 よく見るiOSの Anti Pattern
のご紹介
44.
Anti Pattern 7 Fat
App Delegate
46.
• AppDelegateの責務 =
アプリ全体のライフ サイクルを管理すること • 本来はそれ以外の処理があるべきではない。が、 AppDelegateをGodクラスとして使ってしま う場合がある。
47.
Refactoring • それぞれの処理を、その責務を持ったクラスに委譲できないか検討する (Logging、APNSなど) • NSNotificationCenterを利用し、ViewControllerでアプリのライフ サイクルイベントを監視する •
初期起動 -> 画面遷移を行うことを責務としたクラスを作る(Router, Dispatcherクラス)
48.
Anti Pattern 8 Fat
Storyboad
49.
何が問題なのか? • コンフリクトする。
50.
Refactoring • 文脈単位にStoryboadを切り分けることを検討す る • StoryBoard
Reference を利用してみる
51.
Anti Pattern 9 不適切なイベント通知
52.
iOSのイベント通知方法 • Delegate • KVO •
Notification • Blokcs
53.
Anti Pattern • とにかく何でもKVO
/ Notificationで通知する • 関係が遠いクラスへのイベントをdelegateで通知する
54.
何が問題なのか? • 適切な方法で通知が実装されていないと、どのイ ベントがどこで発火して、誰が監視しているのか の見通しが悪くなる • ので、メンテナンスするのが難しいコードになる
55.
Refactoring • 通知元:通知先が1:1の関係の場合はDelegateを利用した ほうがわかりやすい(Ex. ViewControllerとViewなど) •
しかし、離れてる場合は、Delegateがクラス間でリレー されてしまい、見通しが悪くなりがち • 通知元:通知先が1:Manyの関係の場合はNotificationを 利用したほうがわかりやすい(Ex. 複数のControllerに Modelが状態変化を伝える時など)
56.
Anti Pattern 10 クソコードとか文句言いながら放置する
57.
• 放置すれば状況は必ず悪くなる • 苦労して悪しきコードを理解したとしても、後任者 はまたコードを解読するところから始めることに。 •
とはいえ、程度問題。リスクなくリネームだけで解 決するなら気づいたときに対応すべき。 何が問題なのか?
58.
The Boy Scout
Rule • ボーイスカウトのルール「来た時よりも美し く • checkoutしたときより美しくしてpushしよ う!
59.
終
60.
Copyright © Sansan,
Inc. All rights reserved. 0 Sansanは一緒に新しい価値を作っていく 仲間をさがしています。 Ruby, Ruby on Rails (Webアプリケーション) C#,ASP.NET MVC (Webアプリケーション) iOS / Android アプリ - 個人向け名刺管理アプリ「Eight」 - 名刺データ化分散処理システム - 法人向け名刺管理サービス「Sansan」 - 法人向け名刺管理サービス 「Sansan」 - 個人向け名刺管理アプリ「Eight」 エンジニア募集中 Sansan 採用 検索 recruit@sansan.com まで お気軽にご連絡ください。 興味のある方は