为什么 ComboBox 不够用
你在构建业务应用程序。你在反复解决同样的问题。
你在构建客户搜索功能。 你在构建产品自动完成字段。 你在构建选择弹出框。
大多数 UI 库将这些视为独立的组件。它们称之为查找 (lookups) 或自动完成框 (autocomplete boxes)。这是一个错误。
这些并不是不同的问题。它们是同一个问题。我将这个概念称为 Locator。
业务应用程序依赖于引用。
- 销售订单引用客户。
- 发票引用供应商。
- 交易引用产品。
数据库将这些存储为 ID。用户不会用 ID 来思考。用户思考的是名称、代码或条形码。
真正的问题不在于你如何存储 ID。问题在于用户如何利用他们已知的信息找到正确的实体。
ComboBox 适用于小型列表。可以用它来处理国家或货币。这些列表只有几十行。
ComboBox 在大型数据集面前会失效。你无法滚动浏览 100,000 个客户。在这种规模下,你不再是从列表中进行选择,而是在定位一条记录。
Locator 不是一个 UI 控件。它是一种行为。
Locator 的作用不仅仅是返回一个值。它还负责解析业务引用。
当用户选择一个产品时,应用程序需要的不仅仅是一个 ProductId。它还需要单价、增值税率 (VAT rate) 以及计量单位。
Locator 通过在特定上下文中解析引用来提供所有这些信息。
UI 可能会发生变化:
- 在桌面端,它看起来像是两个可搜索的字段。
- 在网格 (grid) 中,它看起来像是一个自定义编辑器。
- 在移动端,它看起来像是一个搜索界面。
外观在变,但行为保持不变。
一个优秀的 Locator 会尊重用户。经验丰富的用户会使用键盘。如果 Locator 找到了唯一的匹配项,它应该立即完成选择。只有在存在多个匹配项时,它才应该要求用户进行选择。
停止将搜索、自动完成和弹出框视为互不相关的组件。请将 Locator 视为业务软件的一个基本概念。
