一位工程师盯着350行嵌套if语句,旁边躺着一条12个月前的TODO。他的任务是:让内容团队改布局不再需要等发版。
硬编码的泥潭
他们的首页曾经是个冻住的Column。产品轮播永远置顶,横幅焊死在中间,分类栏底朝天。数据从CMS来,但骨架写死在代码里。
改个顺序?提PR。给游客单独塞个登录卡片?再加一层if。A/B测试新组件位置?两拨代码改动加一个功能开关。
内容团队的想法比发版速度快三倍。工程师成了人形瓶颈,每个"快速调整"都要吃掉一个完整迭代。
那条TODO很诚实:要创建一个动态返回首页组件的方法。他们自我安慰了好几个月。
工厂模式的解耦
Dip和同事接手的方案核心很简单:CMS发JSON,应用只负责渲染。ListView遍历列表,每个条目扔给WidgetFactory处理。工厂把"ProductCarousel"翻译成CarouselWidgetBuilder,再变成CarouselWidget。
首页代码不import任何一个具体组件。
工厂是个单例,启动时遍历支持的组件类型枚举,把builder缓存进Map:
「_builderCache = { for (final model in SupportedComponentType.values) model.cmsId: model.widgetBuilder }」
遇到不认识的类型?静默返回SizedBox.shrink(),不崩溃也不报错。
为什么这是产品人的胜利
这个架构真正的价值不在技术优雅,在组织效率。内容团队现在能独立完成:调顺序、换组件、针对用户分层展示、随时上线A/B测试——全部不需要工程师介入。
200万用户看到什么,由一个CMS仪表盘决定。零发版,零代码审查,零排期等待。
当你下次抱怨"小改动为什么要两周"时,想想那350行if语句。技术债务的利息,从来都是产品迭代速度在支付。
热门跟贴