直接操纵难以表达抽象与批量操作
别名: 批量限制 · 抽象操作 · 直接操纵边界 · 不可见集合
概念解释
直接操纵擅长处理当前可见的具体对象,但"所有金额大于一万的未付款项""每隔七天重复""除已归档外"等集合、条件、例外和重复难以只靠拖拽点选表达。强行为其构造选择集时,操作成本和错误率上升。这一条紧接在"用动作替代命令语法"之后:上一条说明了动作替代语法在表达具体对象和空间关系时的优势,这一条说明这个优势有一个明确的边界——一旦要表达的不是某个具体对象、而是一整类满足某种条件的对象,动作语法赖以成立的基础就开始动摇。
机制
抽象操作真正需要的是谓词、逻辑关系和参数化表达——"金额大于一万"是一个谓词,"每隔七天"是一个带参数的重复规则,"除了……之外"是一个排除条件,这些概念本质上是符号性的、不依赖任何具体对象就能独立存在的规则。而可见手势擅长表达的是完全不同的三样东西:空间位置、先后顺序和对象身份,也就是"这个东西在哪""先做哪个后做哪个""是不是同一个对象",这几类信息都必须锚定在一个具体存在的东西上才能表达,符号性的抽象规则没有这样一个具体的锚点可以依附。当任务需要先圈出一个集合再对集合整体操作时,麻烦会进一步累积:如果这个集合本身很大,界面往往没有办法把所有成员同时铺开显示出来,用户只能靠滚动去核对有没有漏选或者多选;例外和优先级这类判断更是几乎不可能从一连串拖拽动作的轨迹里被可靠地推断出来,因为轨迹记录的是"发生了什么动作",而不是"这个动作背后遵循的是什么规则"。
边界
这不代表所有批量操作都不适合用直接操纵去做。多选加上一个批量执行按钮、在画布上框选一片区域、筛选之后先给出预览结果再确认执行,这几种模式完全可以胜任中等规模、条件也不算太复杂的批量任务,直接操纵在这个范围内依然是最直观的方式。真正会出问题的是那些涉及复杂谓词组合、集合本身在界面上根本无法一次性看全、或者规则需要随时间或条件动态变化的场景——这些场景已经超出了"看得见、摸得着"这套交互隐喻能够覆盖的范围,需要的是筛选器、查询表达式、脚本或者规则表这类本质上是符号性的补充路径,而不是继续想办法把手势做得更复杂来硬啃这块骨头。
怎么落地
- 为需要抽象条件的场景提供筛选器、表达式输入或者可视化的规则构建器,并且把筛选或查询的结果转换成一份可以继续用直接操纵方式处理的选择集,让符号化的规则定义和后续的直接操作能够顺畅衔接。
- 批量执行之前,明确显示这次操作会影响的对象数量、大致范围、几个具体样例,以及有没有被排除在外的项目;操作完成后要支持撤销。
- 把直接操作圈选出来的结果,转换成一份用户可以继续编辑的条件摘要,比如显示"已选 34 项:7 月、未付款"这样的文字描述,让用户能确认系统理解的集合和自己心里想的集合是不是一致。
- 验证办法:分别用 1 个、50 个和 1000 个对象这三档规模去测试同一套批量操作,观察操作耗时、错误率和用户的犹豫程度是不是随对象数量增加而急剧上升——如果是,说明当前设计对小规模友好,但没有为真正的批量场景做好准备。