Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iOS Architecture
Search
halfrost
August 25, 2016
Programming
0
280
iOS Architecture
halfrost
August 25, 2016
Tweet
Share
More Decks by halfrost
See All by halfrost
Segment Tree Basics
halfrost
0
980
Redis multi-data center two-way synchronization
halfrost
0
620
Redis design ideas and usage specifications
halfrost
0
470
Golang message streaming practice in Eleme
halfrost
0
450
SQL practical optimization
halfrost
0
430
Fundamentals of Cryptography
halfrost
0
330
The practice of spatial index in geographic service
halfrost
0
430
Getting started with Machine Learning
halfrost
0
320
Functional Reactive Programming
halfrost
0
330
Other Decks in Programming
See All in Programming
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
280
生成AIを利用するだけでなく、投資できる組織へ
pospome
1
290
dotfiles 式年遷宮 令和最新版
masawada
1
750
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
110
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
120
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.3k
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
130
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
620
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
120
認証・認可の基本を学ぼう後編
kouyuume
0
180
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
Mobile First: as difficult as doing things right
swwweet
225
10k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Site-Speed That Sticks
csswizardry
13
990
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
Facilitating Awesome Meetings
lara
57
6.7k
Fireside Chat
paigeccino
41
3.7k
Making Projects Easy
brettharned
120
6.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Transcript
⽅创iOS 架构漫谈 于德志
Problem 代码复⽤率低 业务之间的差异性⼤ ⼯程内各个模块之间有相当⼀些 代码是拷⻉的,或者说仅仅是个 别参数不同,⼤体都相同的代 码,在⼯程中出现的太多,导致 app包的体积明显变⼤ 由于整个项⽬中可以公共的中间件或者组 件⽬前还⽐较少,导致⼀些业务之间差异
性本来不是很⼤,由于重⽤的东⻄少,导 致基本上所有业务都是新的,很多都是重 头开始,导致了开发效率低
Analysis 先看看现在的构架
Now
Actual
How to solve 业务之间差异性⼤ 提⾼代码复⽤率 分层 代码复⽤率低 改
How to solve 业务功能 分层化 组件化 层次结构 改
None
expect
How to solve
Layer View ViewModel 项⽬Model 图⽚ 项⽬名称 概要 上线状态 浏览次数 融资轮数
领域 融资⾦额 imgeURL name desclabel status browse count amount company Area company money
Layer View ViewModel 项⽬Model 群头像 群名称 最近消息 最近时间 imgeURL GroupName
lastmessage lastTime
Advantage 1.分层 UI和业务逻辑相互隔离 2.View可以复⽤ View可以被不⽤业务中复⽤ 不⽤业务的ViewModel通过业务不⽤来注⼊到View中 3.View可以相互灵活替换 View可以根据不同业务逻辑,可以替换成各个不同的 版本
None
Layer View ViewModel ProJectDetailModel imageViewModel userViewModel ProJViewModel …………
Problem 1.组件之间的依赖 组件之间可能有公共的数据源 2.组件之间有先后关系 组件之间可能存在相互调⽤的关系 3.UI之间相互关联 ……
Message Bus GroupViewModel 消息总线 ChatViewModel ChatListViewModel 发布群⼈数变更消息 订阅消息 订阅消息
Advantage 消息总线 数据库组件 ViewModel ViewModel ViewModel ViewModel ⽹络组件 Socket组件 利⽤中介者
模式,现实 完全解耦
Install 开发对应的ViewModel 下⼀个组件 配置消息总线 选择ViewModel 开发新组件 选择组件 开始 结束
summary 1.通过MVVM和组件化实现完全解耦,后期维护效率更⾼ 2.⼀个新业务需求的拆分 将新需求拆分成各个组件View/ViewModel的开发,完 成新需求只需要装配各个组件即可完成 3.开发效率⼤⼤提⾼ ……
Thanks!