FOSMVVM ViewModel Generator 评估
核心用法
该技能用于生成遵循FOSMVVM架构模式的SwiftUI ViewModel代码,通过@ViewModel宏自动处理本地化字符串绑定、工厂方法生成等重复性工作。核心设计哲学是ViewModel作为数据与视图之间的桥梁——服务端或客户端工厂创建ViewModel,编码阶段完成本地化解析,视图仅负责渲染已本地化的数据。
双模式托管架构是最大特色:
- Server-Hosted模式:数据来自服务端数据库,需手写
ViewModelFactory,服务端在JSON编码时完成本地化 - Client-Hosted模式:数据为本地状态(如设置页、错误展示),使用
@ViewModel(options: [.clientHostedFactory]),宏自动生成工厂
典型工作流程
1. 确定托管模式:根据数据来源(服务端/本地)选择对应模式
2. 区分ViewModel类型:Display ViewModel(只读展示)vs Form ViewModel(用户输入,需遵循Fields协议)
3. 应用`@ViewModel`宏:自动生成propertyNames()方法以支持本地化绑定
4. 配置本地化资源:YAML文件管理静态UI文本,动态枚举值使用存储型LocalizableString
代码生成能力
| 场景 | 生成文件 |
|------|---------|
| Server-Hosted顶层 | 4文件:ViewModel、Request、YAML、Factory |
| Client-Hosted顶层 | 2文件:ViewModel(含宏生成工厂)、YAML |
| 子ViewModel | 1-2文件:ViewModel、可选YAML |
显著优点
1. 架构一致性强制:通过宏和协议层级(ViewModel → RequestableViewModel)确保项目遵循MVVM模式,避免视图层混入业务逻辑
2. 本地化自动化:@LocalizedString、@LocalizedSubs、@LocalizedCompoundString等属性包装器配合YAML资源,实现编码期本地化,视图无需处理字符串查找
3. 双模式灵活性:同一应用可混合使用两种模式(如服务端登录+本地设置),且RequestableViewModel与Client-Hosted ViewModel遵循相同渲染模式
4. 类型安全错误处理:反对统一错误架构,鼓励为每种错误场景创建特定ViewModel(如MoveIdeaErrorViewModel),利用Swift类型系统精确匹配
5. 测试友好:Stubbable协议要求所有ViewModel实现stub(),支持SwiftUI预览和单元测试;嵌套类型采用双层Stub模式(零参数委托参数化版本)
6. Swift 6并发就绪:生成的代码默认标记Sendable,符合现代Swift并发要求
潜在缺点与局限性
1. 学习曲线陡峭:需理解FOSMVVM完整架构(Factory、Request、Fields等协议体系),文档中提及的"错误是数据"、"类型安全"等心智模型需时间内化
2. 工具链依赖:深度依赖自定义宏(@ViewModel),宏展开故障或编译器更新可能导致问题
3. 本地化约束:LocalizableString仅能在使用localizingEncoder()的ViewModel中工作,不可用于Fluent JSONB等持久化类型,边界需仔细把控
4. 嵌套类型限制:仅当子类型仅被单一父类型使用且不代表完整ViewModel时才可嵌套,否则需顶层定义,决策规则增加认知负担
5. YAML手动维护:本地化字符串需同步维护YAML文件,无自动化提取工具,存在键名拼写错误风险
6. 服务端耦合:Server-Hosted模式需要服务端实现对应Factory,前后端需协同开发
适合人群
- 中大型SwiftUI项目团队:需要严格架构规范、多人协作的代码库
- 本地化需求复杂的应用:支持多语言、需处理复数、语境依赖文本的场景
- 全栈Swift开发者:使用Vapor等框架实现服务端渲染,需要前后端共享ViewModel定义
- 追求类型安全的团队:希望用编译期检查替代运行时错误处理的开发者
常规风险
1. 宏生成代码调试困难:当@ViewModel展开不符合预期时,需检查宏展开结果,诊断链路较长
2. 本地化键名漂移:YAML键名与Swift属性名需保持同步,重构时易遗漏更新导致运行时缺省回退
3. 模式混用混淆:同一项目中两种托管模式并存,新开发者可能误用模式导致本地化时机错误(服务端应在编码期本地化,客户端在渲染期)
4. 过度工程化风险:简单场景(如静态页面)可能不需要完整FOSMVVM架构,强制应用会增加不必要的抽象层
5. 版本锁定:技能版本历史显示持续迭代(最新2.7),架构变更可能导致存量代码需要迁移
使用建议
建议配合fosmvvm-fields-generator(表单验证)和fosmvvm-leaf-view-generator(模板渲染)形成完整工具链。首次使用时务必完整阅读FOSMVVMArchitecture.md建立架构心智模型,再从此技能入手实践。