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?

问自己这些问题:

  1. "这个功能关心的是什么?"
    • 关心 如何做 → Manager
    • 关心 做什么 → Service
  2. "这个功能需要了解业务规则吗?"
    • 不需要 → Manager
    • 需要 → Service
  3. "这个功能可以跨项目复用吗?"
    • 可以 → Manager
    • 不能(项目特定)→ Service
  4. "这个功能主要与什么交互?"
    • 与系统 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 更多关注

  • 💼 业务逻辑 - 具体的用户功能
  • 📊 数据处理 - 业务数据的增删改查
  • 🔄 流程编排 - 多步骤业务流程
  • 🎯 用户体验 - 面向用户的具体功能