MVVM 架构|协调 Service 层与Manager 层
在使用 MVVM 架构的 Swift 项目,可以抽象出 MVVM 核心层和支持层。
- 核心层包含基本的 Model、View 和 ViewModel。
- 支持层包含 Service、Manager 和其他工具类(Utilities)。
一个完整的项目结构是这样:

在涉及 SwiftData 的功能模块,会更复杂一些。
Manager 和 Service 的协调关系
Service > Manager
典型的调用链路:
View → ViewModel → Service → Manager → 外部资源
Service 层级高于 Manager,在 Service 调用多个 Manager。
在 ViewModel 中调用 Service
- 避免在 View 中直接调用 Service / Manager
// ❌ 错误做法
class UserProfileViewController {
func viewDidLoad() {
// View 不应该直接调用 Service
UserService().fetchUser() // 违反 MVVM 原则
}
}
- 避免在 Model 中直接调用 Service / Manager
// ❌ 错误做法
struct User: Codable {
let id: String
let name: String
func save() {
// Model 不应该包含业务逻辑
CoreDataManager.shared.save(self)
}
}
如何判断应当创建 Manager 还是 Service?
问自己这些问题:
- "这个功能关心的是什么?"
- 关心 如何做 → Manager
- 关心 做什么 → Service
- "这个功能需要了解业务规则吗?"
- 不需要 → Manager
- 需要 → Service
- "这个功能可以跨项目复用吗?"
- 可以 → Manager
- 不能(项目特定)→ Service
- "这个功能主要与什么交互?"
- 与系统 API 交互 → Manager
- 与业务数据交互 → Service

- Manager 是工具,Service 是工匠。工匠使用工具来完成具体的工作。
- Manager 适合被创建到 Framework 中,以便共享。Service 更适合在 Project 中,因为每个项目业务逻辑不相同。
- 如果功能稳定,不会因为项目发生变化,都可以放在 Manager 中。
真实项目案例
社交类 App(微信、Instagram、Facebook)
Manager 层 - 技术基础设施
// 网络和通信
NetworkManager.swift // HTTP 请求
WebSocketManager.swift // 实时消息连接
MediaUploadManager.swift // 图片/视频上传技术
StreamingManager.swift // 音视频流技术
// 存储和缓存
CoreDataManager.swift // 聊天记录本地存储
CacheManager.swift // 图片/头像缓存
FileManager.swift // 文件系统管理
DatabaseManager.swift // SQLite 操作
// 设备功能
CameraManager.swift // 相机拍摄
AudioManager.swift // 录音/播放
LocationManager.swift // 位置服务
ContactsManager.swift // 通讯录访问
NotificationManager.swift // 推送通知
// 认证和安全
AuthManager.swift // 登录状态管理
KeychainManager.swift // 密码/Token 存储
BiometricManager.swift // 指纹/Face ID
EncryptionManager.swift // 端到端加密技术
Service 层 - 业务功能
// 用户相关
UserService.swift // 用户资料 CRUD
FriendService.swift // 好友关系管理
BlockService.swift // 用户屏蔽功能
ProfileService.swift // 个人资料编辑
// 消息相关
MessageService.swift // 消息发送/接收逻辑
ChatService.swift // 聊天会话管理
GroupChatService.swift // 群聊业务逻辑
MessageSyncService.swift // 消息同步
// 内容相关
PostService.swift // 动态发布
FeedService.swift // 动态流算法
CommentService.swift // 评论功能
LikeService.swift // 点赞业务
StoryService.swift // 故事/状态功能
// 媒体相关
PhotoService.swift // 照片分享业务
VideoService.swift // 视频处理业务
LiveStreamService.swift // 直播业务逻辑
电商类 App(淘宝、亚马逊、京东)
Manager 层
// 网络和支付
NetworkManager.swift // API 请求
PaymentManager.swift // 支付渠道技术集成
SecurityManager.swift // 支付安全验证
// 数据管理
CoreDataManager.swift // 商品浏览历史
CacheManager.swift // 商品图片缓存
SearchIndexManager.swift // 本地搜索索引
// 设备和系统
LocationManager.swift // 地址定位
CameraManager.swift // 扫码/拍照
NotificationManager.swift // 订单/促销通知
BiometricManager.swift // 支付验证
Service 层
// 音乐内容
MusicService.swift // 音乐库管理
PlaylistService.swift // 播放列表
AlbumService.swift // 专辑信息
ArtistService.swift // 艺术家信息
LyricsService.swift // 歌词服务
// 播放相关
PlayerService.swift // 播放逻辑
QueueService.swift // 播放队列管理
RecommendationService.swift // 音乐推荐
RadioService.swift // 电台功能
// 社交功能
SharingService.swift // 音乐分享
CommentService.swift // 音乐评论
FollowService.swift // 关注艺术家
出行类 App(Uber、滴滴、高德地图)
Manager 层
// 位置和导航
LocationManager.swift // GPS 定位
MapManager.swift // 地图渲染
NavigationManager.swift // 导航算法
GeofenceManager.swift // 地理围栏
// 通信
NetworkManager.swift // 实时位置同步
SocketManager.swift // 实时订单状态
BluetoothManager.swift // 车载设备连接
Service 层
// 核心业务
RideService.swift // 打车订单业务
DriverService.swift // 司机管理
RouteService.swift // 路线规划
PricingService.swift // 价格计算
// 支付和结算
PaymentService.swift // 支付处理
FareService.swift // 车费计算
WalletService.swift // 电子钱包
// 安全和评价
SafetyService.swift // 安全功能
RatingService.swift // 评价系统
ReportService.swift // 举报功能
Manager 更多关注
- 🔧 技术实现 - 如何与系统 API 交互
- 🏗️ 基础设施 - 网络、存储、硬件访问
- 🔒 安全机制 - 加密、认证、权限
- 🎮 性能优化 - 缓存、流媒体、内存管理
Service 更多关注
- 💼 业务逻辑 - 具体的用户功能
- 📊 数据处理 - 业务数据的增删改查
- 🔄 流程编排 - 多步骤业务流程
- 🎯 用户体验 - 面向用户的具体功能