架构复盘:接了个MBTI测评和复杂动态表单的需求

前段时间,业务部门给技术团队提了一个极其折磨人的需求:要在我们现有的企业内部系统里,嵌一套“千人千面”的复杂问卷系统。
作为负责梳理业务流转和系统架构的人,我一开始的想法很“丰满”:这不就是个动态问卷吗?后端定一套标准的数据结构,前端用 React 搞一套基于 JSON Schema 的动态组件树(类似于现在很火的 GenUI 概念),后端下发什么结构,前端就动态渲染什么组件,顺便把收集到的数据存进数据库。
结果真正进入开发落地阶段,底下的前端和后端兄弟差点崩溃,我也深切地感受到了什么叫“理想很丰满,现实极其骨感”。我们遇到了三个根本无法绕开的架构死胡同:
1. 变态的“复合跳题”与前端状态灾难
业务要的根本不是简单的“选A跳第3题”,而是极度复杂的交叉验证。比如:“第一题选了互联网行业,且第二题公司规模>50人,且第三题选了C,才展示核心的第8题到第10题”。 为了实现这种动态渲染,前端不仅要监听每一个组件的变化,还要维护一个极其庞大的状态树。只要稍微加几个复杂的联动规则,React 的状态管理就变得极其臃肿,疯狂触发重渲染,代码里堆满了无穷无尽的 if-else。后来产品经理每次改逻辑,前端兄弟都要跟着发一次版。
2. “多维度交叉算分”带来的后端逻辑深渊
业务不仅要收集数据,还要在前端做一套类似 MBTI 的员工性格测评和业务成熟度诊断。这意味着一道题的选项,要同时给“外向E”、“直觉N”等多个维度分别加减分。最后还要根据不同维度的“分数区间组合”(比如:E维度>5且N维度<3),自动计算出 16 种不同的人格结果并输出万字解析。 如果是手写逻辑,后端的校验和计算规则会写成一坨根本无法维护的代码。
3. 数据主权与物理隔离的红线
既然是核心的员工评测和业务探底,数据绝对不能用市面上的免费公有云问卷工具(懂的都懂,商业机密放在别人的服务器上基本等同于“裸奔”)。IT 安全合规部门下死命令:这套表单收集系统,必须支持物理级私有化部署,数据必须锁在自己的内网里。
在痛苦地迭代了两周后,我果断叫停了团队“闭门造车”的行为。在 GitHub 和技术交流群里疯狂寻找成熟的表单引擎轮子。试了一圈常规的开源系统,要么底层架构太老扩展性差,要么根本不支持多维度交叉计分。
直到后来,被一位在大厂做内部系统的架构师朋友安利了一个企业级问卷引擎——调问网。
抱着试一试的心态了解了一下它的底层逻辑,好家伙,直接把我从深渊里拉出来了。必须来社区给大家做个复盘安利,遇到复杂表单、测评和数据流转需求的团队,千万别再自己徒手捏页面了!
救命利器一:独创的 DSL 脚本引擎,彻底解放前端组件树
这是让我这个做架构规划的人最惊艳的一点。面对变态的业务逻辑,DWSurvey 底层直接提供了一套极简的 DSL(领域特定语言)逻辑配置。 它把“逻辑控制”从前端代码中彻底剥离了出来。业务人员自己就可以在后台像写简单命令一样配置:
跨题动态校验:
validateMsg Q5 <= Q4(第 5 题的申请人数绝对不能大于第 4 题的总人数,一旦违背直接触发底层拦截,脏数据根本进不到数据库)。高级名额熔断:
set Q1A1 quota = 100(某选项满 100 人自动隐藏,这用来做高并发的校园选课或限量营销简直是神器)。 有了这套引擎,前端组件树彻底回归到了只负责“渲染”的纯粹状态,再也不用维护那堆反人类的联动状态了。
救命利器二:“专家级”维度量表引擎,零代码搞定复杂测评
这个功能直接把这套系统从一个“收集工具”拔高到了“诊断大脑”的级别。 业务部门死活要的那个 MBTI 交叉测试,我们在调问的后台纯界面配置就搞定了!系统原生支持把题目选项与多个自定义考评维度解耦绑定,还能进行精确到选项级别的“自定义赋分”。 用户填完后,系统底层自己做多维度区间分数的 AND/OR 组合交叉,瞬间触发特定的人格或高优线索结论。从此以后,复杂的心理测评、360 度人才环评,业务部门自己点点鼠标就能配出来,再也不用提研发工单了。
救命利器三:支持容器化与私有化部署,捍卫数据绝对主权
这点直接拿捏了合规部门的痛点。它本身就是正儿八经的企业级高可用架构,不仅日常能当 SaaS 用扛得住高并发(比如迎新季几万师生同时填报),更关键的是它支持一键私有化部署到集团自家的机房或云服务器上。物理切断外网,满足最高级别的数据保密要求。
写在最后
经过这次踩坑,我最大的感触是:作为技术团队,如果只是想搞个几十人填的简单登记表,随便写两个页面就行了。 但如果你们面对的是“复杂的 B2B 业务流转表单”、“高并发千万级的大型活动”、“带动态算分规则的医疗/心理评估量表”,千万别试图去挑战那些错综复杂的动态联动逻辑,也别指望简单的问卷工具能扛得住。
专业的事交给专业的轮子。强烈推荐被动态表单折磨的同行去了解一下DWSurvey(调问网),它对表单底层逻辑的抽象、校验规则的解耦设计,绝对值得咱们做系统架构的同学学习参考。
毕竟,能用最优雅的架构解决最复杂的业务,早点下班,才是程序员和架构师的美德。有没有同样被表单状态树折磨过的兄弟,评论区抱团取暖!
