Skip to main content
Glama
schema-driven-ux.mdx17.3 kB
--- title: "基于数据模型的用户界面:从数据模式驱动用户体验" description: "一份面向开发者、设计师和产品团队的实用指南,用于基于数据关系快速构建功能性界面" date: 2025-04-30 author: rajiv tags: [ data-modeling, ui-patterns, crud-interfaces, product-development, mvp-design, schema-driven-ux, ] image: https://shadcnblocks.com/images/block/placeholder-5.svg --- 在设计数据驱动的应用程序时,基础始于集合中的实体,比如餐厅集合。最简单可行的界面通常将这些实体以**表格**的形式呈现,每一行代表一个实体,同时提供搜索和过滤功能。选择一个实体后会显示其详细属性和相关数据。本文探讨这些基础模式,为跨职能团队提供一种系统方法,直接从数据模型快速开发功能性界面,确保技术可行性和以用户为中心的设计。 ## 什么是数据建模? 数据建模涉及创建数据的概念表示,定义其结构、约束和关系,以确保组织性和可访问性。 **关键术语** - **数据**:信息的集合(例如,餐厅列表)。 - **实体**:单个信息(例如,一家餐厅)。每个实体通常都有一个**唯一标识符**在系统中区分自己。 - **数据属性**:实体的具体属性(例如,餐厅或菜品的名称、地址、价格)。 例如,一家餐厅(实体)有一个菜单,表示为具有名称、价格和描述等属性的项目列表。餐厅和其菜单之间的关系是**一对多**,因为一家餐厅可以有多个菜单项。 ## 查询与变更 用户界面作为管理数据的接口,通过两种操作进行: ### 查询 [!toc] 读取数据,例如获取餐厅及其菜单。查询专注于显示数据而不改变它。 ### 变更 [!toc] 向数据库写入数据,包括: - **创建**新实体。 - **更新**现有实体。 - **删除**实体。 变更的表单应该保持最小化,只捕获必要的属性以简化验证并减少错误。避免收集过多数据,因为这会增加错误的风险,并可能需要"草稿"状态,这是次要考虑的问题。 ## 数据查询 数据查询从数据库检索信息而不修改它,优先考虑读取数据的强大用户体验。由于在新产品中读取比写入更频繁(读 > 写),因此重点是提供直观、功能丰富的界面来探索数据集合。 ### 通用功能 [!toc] 无论采用何种呈现模式,以下功能都能增强数据探索: - **过滤**:对属性应用过滤器(例如,菜系类型、位置),支持复杂查询的嵌套过滤器(例如,在特定评分的城市中的餐厅)。 - **搜索**:使用全局搜索栏跨属性查询,具有自动完成和高亮匹配功能以提高效率。 - **数据属性自定义**:显示/隐藏数据属性,通过拖放重新排序,并调整显示首选项。 - **保存视图**:将过滤器、搜索和属性配置保存为预设以便快速重用。 - **响应式反馈**:提供查询结果的实时更新,以及已应用过滤器或搜索条件的清晰指示。 ### 表格模式:平面呈现 [!toc] 以表格形式显示数据,每行代表一个实体(例如,一家餐厅),列显示属性(例如,名称、地址)。适用于以比较为重点的探索。 **模式特定功能**: - **可排序列**:通过点击列标题排序数据(例如,按名称或评分排序)。 - **分页/滚动**:支持大型数据集的分页或无限滚动。 ### 列表模式:分组呈现 [!toc] 将数据呈现为列表,按属性分组(例如,按城市或菜系分组的餐厅)。适用于层级或分类探索。 **模式特定功能**: - **可折叠分组**:展开/折叠分组以进行聚焦浏览。 - **分组级别操作**:在特定分组内应用过滤器或搜索(例如,过滤一个城市的餐厅)。 ### 推荐方法 [!toc] 对于平面、以比较为导向的数据探索,利用**表格模式**,对于分类、层级数据使用**列表模式**。将通用功能—过滤、搜索、数据属性自定义和保存视图—应用于两种模式,以确保一致、高效的用户体验。这最大化了可读性和可用性,符合新产品以读取为主的特性。 ## 实体查询 实体查询检索单个实体(例如,一家餐厅)及其属性,强调关系的清晰呈现以实现直观探索。 ### 详情页面呈现 [!toc] 在详情页面上以清晰的布局显示实体的核心属性(例如,名称、地址、唯一标识符),使用标题以提高清晰度。 **功能**: - **章节导航**:将属性组织到章节中(例如,"概述"、"详情")以便快速访问,并提供目录以便于导航。 ### 呈现关系 [!toc] 在专用部分或标签中以表格或列表形式显示关系(例如,餐厅的菜单),详细说明相关实体(例如,具有名称、价格、描述的菜单项)。 **功能**: - **可折叠部分**:通过折叠面板隐藏/显示相关数据以减少混乱。 - **嵌套查询**:在关系内过滤(例如,按价格范围过滤菜单项)。 - **关系导航**:使用链接或按钮访问相关实体(例如,查看菜系详情)或展开次要关系(例如,评论)。 - **数据属性自定义**:在关系表格中显示/隐藏或重新排序属性,具有可调整的显示首选项。 ### 推荐方法 [!toc] 在**详情页面**上以清晰的标签式布局呈现实体及其核心属性,包含数据属性自定义。对于关系,采用平衡方法—在页面上的可折叠部分直接显示关键或较小的数据集,同时为更复杂的关系提供专用页面链接。在导航链接中包含特定于实体的过滤,以维持上下文。这确保了探索实体及其关系时的直观、以读取为重点的用户体验。 ## 创建变更 数据创建可以通过多种方式进行,每种方式都会对用户体验产生不同影响。以下是常见场景: ### 场景1:创建单个实体 [!toc] 使用具有最少字段的表单(例如,名称、地址)创建单个餐厅。这种方法简化了验证并确保数据完整性。创建后出现添加菜单的按钮,保持用户体验简单直观。 ### 场景2:批量创建实体 [!toc] 一次性创建多个餐厅,通常通过文件上传或批量输入。这需要强大的验证以防止错误,可能会使用户体验变得复杂。反馈必须清晰地指示成功或失败。 ### 场景3:创建带关系的实体 [!toc] 同时创建餐厅及其菜单。这增加了复杂性,因为餐厅和菜单项都需要验证。例如,同时创建菜系会带来更多挑战。这种方法存在使用户不知所措的风险。 ### 如何创建现有实体的关系 [!toc] 创建实体后,提供清晰的路径来建立其关系。从实体的详情页面,根据复杂性通过模态框或专用页面提供添加相关项目(例如,餐厅的菜单项)的选项。对于简单的关系,使用模态框以最小化上下文切换—用户在添加相关项目时停留在详情页面。对于需要更多表单的复杂关系,考虑使用具有简化工作流程的专用页面。 实施此方法时: - 在详情页面的相关部分包含显著的"添加[关系]"按钮 - 对于基于模态框的创建,保持表单最小化并专注于必要属性 - 对于基于页面的创建,包含清晰的返回父实体的导航 - 预填父实体的标识符以维持关系上下文 这种顺序方法保持简单性同时确保适当的关系管理。 ### 推荐方法 [!toc] 最简单和最有效的方法是**使用最少数据创建单个实体**。例如,首先创建餐厅,然后提供添加菜单的选项。这最小化了验证问题并保持清晰、用户友好的界面。对于关系创建,简单表单优先使用模态框,复杂表单使用专用页面,始终保持界面重点突出且简洁。 ## 更新变更 更新现有实体涉及修改其属性或关系。以下是常见场景: ### 场景1:更新单个实体 [!toc] 通过预填现有数据的表单更新餐厅的详细信息(例如,名称、地址)。最少的字段简化了验证,清晰的反馈确认更新,保持简单直观的用户体验。 ### 场景2:批量更新实体 [!toc] 一次性更新多个餐厅,通常通过批处理或文件上传。这需要仔细验证以避免错误,用户体验必须提供详细的反馈,说明哪些更新成功或失败。 ### 场景3:更新带关系的实体 [!toc] 同时更新餐厅的详细信息及其菜单。这增加了复杂性,因为餐厅和菜单项都必须验证。例如,同时更新餐厅的菜系及其菜单带来更多挑战。如果设计不当,这种方法可能会让用户感到困惑。 ### 推荐方法 [!toc] 最简单的方法是**使用最少数据更新单个实体**。例如,首先更新餐厅的详细信息,然后提供修改菜单的选项。这减少了验证复杂性并确保清晰、用户友好的界面。 ## 删除变更 删除实体会从数据库中移除它。以下是常见场景和建议的删除发起位置: ### 场景1:删除单个实体 [!toc] 删除单个餐厅,通常在用户确认后(例如,通过对话框)。用户体验应清晰地指示成功或失败,保持过程简单直观。 **建议位置**:从餐厅的**详情页面**发起删除,用户可以在确认前查看其数据。或者,通过餐厅所在行的"删除"按钮或图标从**表格**视图允许删除,并提供确认提示以防止错误。 ### 场景2:批量删除实体 [!toc] 一次性删除多个餐厅,通常通过批量选择。这需要强大的验证以防止意外删除,用户体验必须清晰地反馈哪些实体被移除。 **建议位置**:从**表格**视图执行批量删除,用户可以使用复选框选择多行并通过单个操作触发删除。确认对话框应总结所选实体。 ### 场景3:删除带关系的实体 [!toc] 同时删除餐厅及其菜单。这很复杂,因为关系(例如,菜单项)也必须移除。例如,删除具有关联菜系的餐厅会带来更多考虑。如果处理不当,这种方法可能会导致错误。 **建议位置**:从**详情页面**发起,用户可以看到餐厅的关系(例如,菜单)并理解删除的完整范围。确认对话框应明确提到相关数据的删除。 ### 推荐方法 [!toc] 最简单的方法是从**详情页面**删除**单个实体**,确保其关系(例如,菜单)也被清晰地移除。这最小化错误并保持直观的用户体验。对于批量删除,使用**表格**视图并提供清晰的反馈和确认。 ## 保持用户体验简单 [!toc] 避免同时创建、更新或删除多个实体或关系,因为这会使验证和反馈变得复杂。例如,不要同时管理餐厅、其菜单和菜系。相反,逐个处理实体,随后提供管理关系的选项。这种顺序方法确保了干净、直观的用户体验。 ## 结论 数据建模通过构建直观的用户体验/用户界面,架起了技术与产品设计之间的桥梁。使用最小表单,先管理单个实体,然后再处理关系,以保持简单性。通过强大的查询界面增强以读为重的工作流程,确保功能性和用户友好的体验。 ## 数据操作与用户界面模式总结 | 数据操作 | 主要用户界面模式 | 次要用户界面模式 | 关键特性 | 最佳实践 | | --------------------------- | ------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **数据查询(集合)** | 表格 | 带分组的列表 | 过滤、搜索、可排序列、分页、数据属性自定义、保存视图 | 将表格用于以比较为中心的浏览,将列表用于分层/分类数据,优先考虑以读为重的工作流程 | | **实体查询(单个)** | 带章节的详情页 | 选项卡式界面 | 章节导航、可折叠章节、嵌套查询、关系导航、数据属性自定义 | 突出显示核心属性,直接在页面上显示小型关系,链接到专用页面以处理复杂关系,使用查询参数过滤关系数据 | | **创建变更** | 简单表单 | 模态框或向导 | 最小字段、清晰验证、反馈指示器、顺序创建流程 | 首先创建单个实体,随后添加关系,简单关系创建使用模态框,复杂表单使用专用页面 | | **更新变更** | 预填充表单 | 行内编辑 | 现有数据预填充、验证、成功/失败反馈、变更跟踪 | 一次更新单个实体,分开处理关系更新,最小化字段以减少验证复杂性 | | **删除变更** | 确认对话框 | 表格中的批量选择 | 清晰的警告、关系影响显示、成功/失败反馈、撤销选项(如果可能) | 从详情页删除单个实体,从表格删除批量操作,明确显示对关系的影响 | | **关系创建** | 模态框 | 专用页面 | 父实体上下文、最小表单字段、快速访问详情页 | 简单关系使用模态框,复杂表单使用专用页面,保持父实体上下文 | ## Schema-Driven UX 的基本原始组件 | 组件 | 关键特性 | 数据操作 | 使用位置 | | ------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------- | | **表格组件** | 可排序列、分页、行选择、紧凑/详细视图、行内操作 | 数据查询、实体查询、删除变更(批量) | 实体集合、关系、嵌套数据展示 | | **列表组件** | 分组、可折叠章节、嵌套操作、分层展示 | 数据查询、实体查询 | 分层数据、分类信息、简单关系展示 | | **过滤组件** | 多种过滤类型、保存的过滤器、清晰的指示器 | 数据查询、实体查询 | 附加到表格和列表,用于过滤集合或关系 | | **搜索组件** | 自动完成、结果高亮、搜索历史 | 数据查询、实体查询 | 全局搜索和集合内搜索 | | **表单组件** | 验证、字段类型、响应式布局、错误处理、条件字段 | 创建变更、更新变更 | 所有数据创建和编辑操作 | | **对话框组件** | 多种尺寸、焦点控制、确认操作、表单托管 | 创建变更、更新变更、删除变更 | 确认、简单数据输入、关系管理 | | **页面布局组件** | 章节导航、选项卡、响应式布局、操作按钮、面包屑 | 实体查询、数据查询 | 实体和集合的主要内容组织 | | **操作组件** | 按钮、菜单、基于权限的可见性、上下文选项 | 创建变更、更新变更、删除变更 | 在整个界面中触发操作 | | **反馈组件** | 成功/错误状态、吐司消息、行内验证、加载指示器 | 创建变更、更新变更、删除变更、数据查询、实体查询 | 操作期间和之后向用户反馈 | | **空状态组件** | 消息、主要操作按钮、上下文指导 | 数据查询、实体查询 | 没有数据的集合、没有项目的关系部分 |

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/metacode0602/open-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server