# architect 设计良好的工具 (well-architected-tools) - Full Documentation # ⚠ 反模式资源管理器 破坏 Salesforce 上的 Trust、易用性和适应性的常见陷阱。 ## 受信 削弱安全性、合规性或可靠性的做法,以及如何避免。
受信 - 反模式
安全 合规 可靠
## 轻松 增加复杂性、降低自动化或影响用户体验的做法。
简单 - 反模式
意图 自动 参与
## 可调整 降低弹性、限制可组合性或增加更改难度的做法。
可适应 - 反模式
弹性 可合成
# ✅ 模式资源管理器 在 Salesforce 上构建可信、轻松和适应性强的解决方案的成熟模式。 ## 受信 保护系统和数据,满足法律和道德标准,并提供可用的高性能解决方案。
受信 - 模式
安全 合规 可靠
## 轻松 设计清晰、自动化和引人入胜的用户体验。
简单 - 模式
意图 自动 参与
## 可调整 通过弹性操作和可组合架构构建变革。
可适应 - 模式
弹性 可合成
# 参与 - 有用 ### 应用程序内指导模式 了解有关构建良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview)性的更多信息 → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [帮助](/docs/architect/zh-cn/well-architected/guide/engaging#有用) → [应用程序内指导](/docs/architect/zh-cn/well-architected/guide/engaging#应用程序内指导) | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------ | | 平台 \| 设计标准 | ✅ 提示和逐步解说的设计模式 | | 平台 \| 设计标准 | ✅ 应用程序内指导的批准用例 | | 平台 \| 文档 | ✅ 用户、应用程序和有效应用程序内指导的明确矩阵 | | 平台 \| 组织 | ✅ “应用程序内指导之间的延迟”设置使用默认值或长于 Salesforce 提供的默认(24 小时)周期的自定义值 | | 平台 \| 组织 | ✅ 没有应用程序有多个有效的逐步解说 | | 平台 \| 组织 | ✅ 没有逐步解说中的“显示时间”设置高于 10 | | 平台 \| 组织 | ✅ 未激活“任何页面、任何应用程序”或“此页面、任何应用程序”的提示 | ### 通知和消息模式 了解有关架构良好的[简单](/docs/architect/zh-cn/well-architected/guide/easy-overview)性的更多信息 → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [帮助](/docs/architect/zh-cn/well-architected/guide/engaging#有用) → [通知和消息](/docs/architect/zh-cn/well-architected/guide/engaging#通知和消息) | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ---------------------------------------------------------------------------- | | Einstein \| 客服人员 | ✅ 客服人员欢迎消息会将客服人员介绍为 AI 助手 欢迎消息应通知用户未与人类聊天 | | Einstein \| 业务 | ✅ 要求员工对生成的输出进行反馈 要求员工对生成的输出进行反馈 | | 平台 \| 应用程序 | ✅ 没有人为参与点,没有生成式响应直接发送到最终用户 | | 平台 \| 设计标准 | ✅ 通知、祝酒词和通知的批准用例 | | 平台 \| 设计标准 | ✅ 吐司变体和通知的设计模式 | | 平台 \| 设计标准 | ✅ 错误消息的设计模式 | | 平台 \| 组织 | ✅ AI 免责声明以清晰易懂的语言供用户使用 | | 平台 \| 组织 | ✅ 机器人在第一次与用户交互之前清楚地标识自己 | | 平台 \| 组织 | ✅ 生成式响应始终标识使用的数据源 | | 平台 \| 组织 | ✅ 与生成式 AI 相关的风险的免责声明会在首次交互前向用户显示 | | 平台 \| 组织 | ✅ 通知是主要的消息传递格式 | | 平台 \| 组织 | ✅ 吐司消息使用变体 | | 平台 \| 组织 | ✅ `mode`设置为 `sticky` 的吐司消息不存在 | | 平台 \| 组织 | ✅ 通知很少使用(如果有的话) | ### 荣誉和奖励模式 了解有关精心构建[的轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [帮助](/docs/architect/zh-cn/well-architected/guide/engaging#有用) → [认可和奖励](/docs/architect/zh-cn/well-architected/guide/engaging#recognition-rewards)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------- | | 平台 \| 组织 | ✅ 应用程序使用嵌入式 Analytics 向用户显示相关目标进度和生产力统计数据 | | 平台 \| 组织 | ✅ 路径庆祝仅在用户同意下启用 | | 平台 \| 组织 | ✅ 通知和消息传递包含用户识别,并在通知对象和触发通知内容的设计中反映用户首选项 | --- ### 应用程序内指导反模式 了解有关构建良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview)性的更多信息 → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [帮助](/docs/architect/zh-cn/well-architected/guide/engaging#有用) → [应用程序内指导](/docs/architect/zh-cn/well-architected/guide/engaging#应用程序内指导) | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | --------------------------------------------------------------------------------- | | 平台 \| 设计标准 | ⚏ 文档不包含显示用户、应用程序、有效应用程序内指导的明确矩阵 | | 平台 \| 设计标准 | 不解决应用程序内指导 | | 平台 \| 组织 | ⚠ ⸏ “应用程序内指导之间的延迟”设置设置为短于 Salesforce 提供的默认(24 小时)期间 | | 平台 \| 组织 | ⚏ 应用程序有多个活动逐步解说 | | 平台 \| 组织 | 许多逐步解说都有大于 10 的“显示时间”设置(有些的最大值为 30) | | 平台 \| 组织 | 提示是临时激活的,许多具有“任何页面、任何应用程序”或“此页面、任何应用程序”设置 | ### 通知和消息反模式 了解有关架构良好的[简单](/docs/architect/zh-cn/well-architected/guide/easy-overview)性的更多信息 → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [帮助](/docs/architect/zh-cn/well-architected/guide/engaging#有用) → [通知和消息](/docs/architect/zh-cn/well-architected/guide/engaging#通知和消息) | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------- | | 平台 \| 应用程序 | 生成式响应直接发送到最终用户,无需人工参与 | | 平台 \| 设计标准 | 如果定义了设计标准,它们不会解决错误和通知 | | 平台 \| 组织 | 存在`mode`设置为 `sticky` 的吐司消息 | | 平台 \| 组织 | ⚏ 吐司消息不总是使用变体 | | 平台 \| 组织 | 生成式响应不会识别使用的数据源 | | 平台 \| 组织 | 不会向用户显示生成性 AI 风险的免责声明 | | 平台 \| 组织 | ⚏ AI 免责声明没有以清晰易懂的语言呈现给用户 | | 平台 \| 组织 | ⚏ 机器人在首次与用户交互前无法明确身份 | | 平台 \| 组织 | 电子邮件是主要的消息传递格式 | | 平台 \| 组织 | ⚠ 消息类型没有一致的方法 | | 平台 \| 组织 | 通知是临时使用的 | ### 认可和奖励反模式 了解有关精心构建[的轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [帮助](/docs/architect/zh-cn/well-architected/guide/engaging#有用) → [认可和奖励](/docs/architect/zh-cn/well-architected/guide/engaging#recognition-rewards)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------- | | 平台 \| 组织 | 与目标进度和生产力统计相关的 Analytics 仅在报表或经理仪表板中可用 | | 平台 \| 组织 | 启用路径庆祝,无需检查用户同意 | | 平台 \| 组织 | 通知和消息传递不包括任何类型的用户识别,或者不反映用户的首选项,并且感觉噪音或噱头 | --- # 参与 - 简化 ### 应用程序复杂性模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview)性 → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [简化](/docs/architect/zh-cn/well-architected/guide/engaging#简化) → [应用程序复杂性](/docs/architect/zh-cn/well-architected/guide/engaging#应用程序复杂性)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | -------------------------------------------------------------------------- | | 平台 \| 组织 | ✅ 在管理员提供的默认配置中,应用程序少于 10 个选项卡 | | 平台 \| 组织 | ✅ 没有应用程序将“在此应用程序中禁用最终用户对导航项目的个性化”设置为 true | ### 外形规格模式 了解有关架构良好的[简易性](/docs/architect/zh-cn/well-architected/guide/easy-overview)的更多信息 → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [简化](/docs/architect/zh-cn/well-architected/guide/engaging#简化) → [外形规格](/docs/architect/zh-cn/well-architected/guide/engaging#外形规格) | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | 平台 \| Aura | ✅ 应用程序生成器中可用的自定义 Aura 组件会在各自的设计文件中声明支持的外形规格 | | 平台 \| Aura | ✅ 应用程序生成器中可用的自定义 Aura 组件实施宽度感知样式模式 | | 平台 \| Aura | ✅ 自定义 Lightning 页面模板使用 Aura 组件设计文件中的`design:supportedFormFactors`和`design:supportedFormFactor` | | 平台 \| 桌面 | ✅ 数据输入字段和导航控件适合屏幕,并可按预期进行交互 | | 平台 \| 桌面 | ✅ 根据页面激活分配规则,记录和应用程序页面正确显示 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 应用程序生成器中可用的自定义 LWC 实施宽度感知样式模式 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 应用程序生成器中可用的自定义 LWC 会在各自的设计文件中声明支持的外形规格 | | 平台 \| 移动设备 | ✅ 移动导航菜单,专为更小的外形规格优化 | | 平台 \| 移动设备 | ✅ 数据输入和导航控件正确显示 | | 平台 \| 移动设备 | ✅ 用户可以轻松输入数据 | | 平台 \| 移动设备 | ✅ 紧凑布局显示在记录级别 | | 平台 \| 组织 | ✅ Salesforce 提供的 Lightning 页面模板用于所有或大部分页面 | ### 表单模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [简化](/docs/architect/zh-cn/well-architected/guide/engaging#简化) → [表格](/docs/architect/zh-cn/well-architected/guide/engaging#表格)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------- | | 平台 \| 应用程序 | ✅ 在用户导航离开或提交数据之前出现数据输入错误 | | 平台 \| 应用程序 | ✅ 字段遵循逻辑分组 | | 平台 \| 应用程序 | ✅ 数据提交仅发生一次 | | 平台 \| 应用程序 | ✅ 操作和导航的标签清晰 | | 平台 \| 应用程序 | ✅ 及时提供可视反馈,以确认用户操作,例如按钮单击 | | 平台 \| 应用程序 | ✅ 导航按钮(例如,“转到”、“下一步”和“返回”)在整个 UI 中一致放置 | | 平台 \| 应用程序 | ✅ 数据输入字段以五个或更少的组显示 | | 平台 \| 应用程序 | ✅ 数据输入错误明确,并显示在字段级别 | | 平台 \| 应用程序 | ✅ 分页控件支持在步骤之间移动 | | 平台 \| 表单逻辑 | ✅ 字段尽可能预填写或自动填写 | | 平台 \| 表单逻辑 | ✅ 用户无需等待长时间运行的服务器端操作完成 | | 平台 \| 表单逻辑 | ✅ 数据操作执行一次 | | 平台 \| 表单逻辑 | ✅ 自定义组件使用基于服务器的操作的`cacheable=true`,不涉及数据操作 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 在 LWC 中,`@wire`适配器处理所有不涉及数据操作的操作 | --- ### 应用程序复杂性反模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview)性 → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [简化](/docs/architect/zh-cn/well-architected/guide/engaging#简化) → [应用程序复杂性](/docs/architect/zh-cn/well-architected/guide/engaging#应用程序复杂性)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------------------- | | 平台 \| 组织 | 许多应用程序将“禁用此应用程序中的最终用户导航项目个性化”设置为真,或在组织范围内禁用自定义导航项目的权限 | | 平台 \| 组织 | 在管理员提供的默认配置中,应用程序通常拥有超过 10 个选项卡 | ### 外形反模式 了解有关架构良好的[简易性](/docs/architect/zh-cn/well-architected/guide/easy-overview)的更多信息 → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [简化](/docs/architect/zh-cn/well-architected/guide/engaging#简化) → [外形规格](/docs/architect/zh-cn/well-architected/guide/engaging#外形规格) | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | 平台 \| Aura | 自定义 Lightning 页面模板没有统一使用 Aura 组件设计文件中的`design:supportedFormFactors`和`design:supportedFormFactor` | | 平台 \| Aura | 应用程序生成器中可用的自定义 Aura 组件未在各自的设计文件中一致声明支持的外形规格 | | 平台 \| Aura | 在自定义 Aura 组件中,不同外形规格的样式完全由 CSS 中的硬编码`px`或`%`值驱动 | | 平台 \| Aura | 在自定义 Aura 组件中,Salesforce 提供的界面不会实施宽度感知样式。 | | 平台 \| 桌面 | 数据输入字段和导航控件不会显示在屏幕上的预期位置 | | 平台 \| 桌面 | 与数据输入字段和导航控件的交互不匹配所需的行为 | | 平台 \| 桌面 | 缺少页面激活分配规则意味着所有用户都可以看到相同的记录和应用程序页面 | | 平台 \| Lightning Web 组件 (LWC) | 在自定义 LWC 中,Salesforce 提供的界面不会实施宽度感知样式 | | 平台 \| Lightning Web 组件 (LWC) | 在自定义 LWC 中,不同外形规格的样式完全由 CSS 中的硬编码`px`或`%`值驱动 | | 平台 \| Lightning Web 组件 (LWC) | 应用程序生成器中可用的自定义 LWC 未在各自的设计文件中一致声明支持的外形规格 | | 平台 \| 移动设备 | 数据输入和导航控制呈现不一致或不正确 | | 平台 \| 移动设备 | 用户无法轻松输入数据 | | 平台 \| 移动设备 | 紧凑布局未在记录级别配置 | | 平台 \| 移动设备 | 移动导航菜单与桌面导航无法区分 | | 平台 \| 组织 | Classic 仍处于活动状态 | ### 表单反模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [参与](/docs/architect/zh-cn/well-architected/guide/engaging) → [简化](/docs/architect/zh-cn/well-architected/guide/engaging#简化) → [表格](/docs/architect/zh-cn/well-architected/guide/engaging#表格)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------- | | 平台 \| 应用程序 | ⚏ 数据输入字段以大于 5 的组显示 | | 平台 \| 应用程序 | 数据输入字段没有逻辑分组,需要填写表单的用户进行大量的上下文切换 | | 平台 \| 应用程序 | 步骤和分组未明确定义,导致导航困难 | | 平台 \| 应用程序 | 数据输入错误仅在单击表单的提交按钮时显示 | | 平台 \| 应用程序 | 操作和导航的标签会使不熟悉基础系统功能的用户感到困惑 | | 平台 \| 应用程序 | 不提供用户操作的视觉确认 | | 平台 \| 应用程序 | 导航按钮会显示在整个 UI 的任意位置 | | 平台 \| 应用程序 | ⚏ 数据输入错误包含只能由了解系统内部工作原理的人员解释的加密信息 | | 平台 \| 应用程序 | 数据提交在整个数据输入过程中多次发生 | | 平台 \| 表单逻辑 | ⚏ 可以预填写或自动填写的字段需要手动输入 | | 平台 \| 表单逻辑 | 用户必须在提交过程中停止工作,以等待服务器端操作完成 | | 平台 \| 表单逻辑 | 自定义组件集`cacheable=false` | --- # 受信模式和反模式资源管理器 保护系统和数据,满足法律和道德标准,并提供可用的高性能解决方案。
✅ 受信 - 模式
安全 合规 可靠
削弱安全性、合规性或可靠性的做法,以及如何避免。
受信 - 反模式
安全 合规 可靠
# 可压缩 - 可封装性 ### 依赖性管理模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → 可[组合](/docs/architect/zh-cn/well-architected/guide/composable) → 可[打包性](/docs/architect/zh-cn/well-architected/guide/composable#可打包性) → [依赖性管理](/docs/architect/zh-cn/well-architected/guide/composable#依赖性管理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ---------------------------------------------------------------------------------- | | 平台 \| 设计标准 | ✅ 存在引入或修改依赖性的标准 | | 平台 \| 设计标准 | ✅ 存在声明依赖性的标准 | | 平台 \| 软件包 | ✅ 软件包之间没有重复的元数据 | | 平台 \| 软件包 | ✅ 对于软件包开发,所有早期开发工作都发生在临时组织中 | | 平台 \| 源控制 | ✅ 开发人员可以从源代码控制中创建临时组织并成功部署软件包元数据 | | 平台 \| 源控制 | ✅ 解锁软件包的软件包版本使用别名 (`LATEST`) 在`sfdx-project.json`清单中声明依赖性 | ### 松耦合模式 了解有关结构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → 可[包装性](/docs/architect/zh-cn/well-architected/guide/composable#可打包性) → [松耦合](/docs/architect/zh-cn/well-architected/guide/composable#松耦合)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------- | | 平台 \| Apex | ✅ 依赖于动态运行时信息的方法引用适当的自定义元数据类型 | | 平台 \| Apex | ✅ 使用抽象或虚拟 Apex 类定义常见服务和模板代码 | | 平台 \| 设计标准 | ✅(可选)所有批准的自定义设置用例都清楚地列出(如果有) | | 平台 \| 设计标准 | ✅ 命名约定解决如何表示软件包单位 | | 平台 \| 设计标准 | ✅ 可以搜索并查找所有当前定义的软件包单元(和相关命名约定)的列表 | | 平台 \| 设计标准 | ✅ 存在提出软件包单元添加或更改的标准 | | 平台 \| 组织 | ✅ 自定义元数据类型为代码和声明性自定义提供动态的运行时信息 | | 平台 \| 组织 | ✅ 不存在自定义对象,以便为代码或声明性自定义提供动态的运行时信息 | | 平台 \| 组织 | ✅ 不存在自定义设置或自定义设置很少,并且没有与封装功能相关的设置 | | 平台 \| 软件包 | ✅ 生产或 Sandbox 中未定义非受管软件包 | | 平台 \| 软件包 | ✅ 依赖于组织的解锁软件包仅用于早期阶段或概念验证实验 | | 平台 \| 源控制 | ✅ `package.xml`文件仅出现在早期阶段或概念验证项目清单中 | --- ### 依赖性管理反模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → 可[组合](/docs/architect/zh-cn/well-architected/guide/composable) → 可[打包性](/docs/architect/zh-cn/well-architected/guide/composable#可打包性) → [依赖性管理](/docs/architect/zh-cn/well-architected/guide/composable#依赖性管理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ----------------------------------------------------------------------------- | | 平台 \| 设计标准 | 设计标准不存在或未涉及如何声明依赖性 | | 平台 \| 软件包 | 通过在不同软件包中复制元数据来规避依赖性 | | 平台 \| 软件包 | 早期软件包开发在 Developer Sandbox 中发生,早期软件包开发在临时组织中不会发生 | | 平台 \| 源控制 | 开发人员无法使用源控制成功使用临时组织 | | 平台 \| 源控制 | 解锁软件包的软件包版本在`sfdx-project.json`清单中明确声明(无`LATEST`别名) | ### 松耦合反模式 了解有关结构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → 可[包装性](/docs/architect/zh-cn/well-architected/guide/composable#可打包性) → [松耦合](/docs/architect/zh-cn/well-architected/guide/composable#松耦合)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------- | | 平台 \| Apex | ⚏ 常见服务和模板代码不易与其他类区分 | | 平台 \| Apex | 方法没有使用一致的方法来访问动态、运行时信息,或者方法没有查询运行时行为信息的自定义对象,或者代码引用自定义设置 | | 平台 \| Apex | 跨类和方法的内部引用难以遵循,并且在整个代码库中不一致 | | 平台 \| 设计标准 | 设计标准不存在或未处理软件包单元和用例 | | 平台 \| 组织 | 使用自定义设置 | | 平台 \| 组织 | 自定义对象的存在是为了提供代码或声明性自定义的动态运行时信息 | | 平台 \| 组织 | 自定义元数据类型未用于(或未一致使用)为代码和声明性自定义提供动态运行时信息 | | 平台 \| 软件包 | 非受管软件包在生产或 Sandbox 中定义 | | 平台 \| 软件包 | ⚠ 所有软件包都是依赖于组织的解锁软件包 | | 平台 \| 源控制 | `package.xml`文件用于控制元数据部署 | --- # 可撰写 - 问题分离 ### 功能单元模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → [关注点分离](/docs/architect/zh-cn/well-architected/guide/composable#分离问题) → [功能单元](/docs/architect/zh-cn/well-architected/guide/composable#功能单元)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------ | | Einstein \| 组织 | ✅ 对提示模板进行迭代,以了解哪些输入会影响响应 对提示模板进行迭代,以了解零件如何影响模型的响应 | | 平台 \| 设计标准 | ✅ 存在所有当前定义的功能单元(和相关命名约定)的列表 | | 平台 \| 设计标准 | ✅ 存在提出功能单元增加或变更的标准 | | 平台 \| 设计标准 | ✅ 命名约定解决如何表示功能单元 | | 平台 \| 文档 | ✅ 所有文档和实施图表清楚显示组件的功能单元 | | 平台 \| 文档 | ✅ 功能单元中的所有组件均可搜索并易于查找 | | 平台 \| 文档 | ✅ 系统横屏图清楚显示组织中的功能单元 | | 平台 \| 文档 | ✅ 单个组件的文档包含组件的功能单元映射 | | 平台 \| 组织 | ✅ 可以快速识别指定元数据的功能单元对齐方式(例如,流、Apex 类或 Lightning 页面) | | 平台 \| 组织 | ✅ 功能单元使用业务友好术语进行标记 | ### 状态管理模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → [关注点分离](/docs/architect/zh-cn/well-architected/guide/composable#分离问题) → [状态管理](/docs/architect/zh-cn/well-architected/guide/composable#状态管理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ---------------------------------------------------------- | | 平台 \| Apex | ✅ 保存点和回滚行为用于所有数据操作 | | 平台 \| 设计标准 | ✅ 有状态设计和无国籍设计的用例清晰明了 | | 平台 \| 设计标准 | ✅ 存在状态通信的批准模式 | | 平台 \| 设计标准 | ✅ 存在批准的无国籍通信模式 | | 平台 \| 设计标准 | ✅ 州/省存在明确的类别 | | 平台 \| 文档 | ✅ 每个处理有状态和/或无状态通信的组件都指示实施了何种模式 | | 平台 \| 文档 | ✅ 流程和交互图表提供有关状态类别和切换的详细信息 | | 平台 \| 文档 | ✅ 可以搜索和查找实施特定有状态/无状态模式的所有组件 | | 平台 \| 流 | ✅ 错误路径和使用回滚记录元素 | --- ### 功能单元反模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → [关注点分离](/docs/architect/zh-cn/well-architected/guide/composable#分离问题) → [功能单元](/docs/architect/zh-cn/well-architected/guide/composable#功能单元)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------- | | 平台 \| 设计标准 | 设计标准不存在或未涉及功能单元和用例 | | 平台 \| 文档 | 您无法搜索特定功能单元和/或搜索无助于识别功能单元中的所有组件 | | 平台 \| 文档 | 组件文档描述了组件所属的功能单元,但这是该功能单元定义出现的唯一位置 | | 平台 \| 文档 | 组件文档不存在 | | 平台 \| 组织 | 无法识别任何元数据的功能单元对齐 | | 平台 \| 组织 | 功能单元信息不一致或不准确 | | 平台 \| 组织 | ⚏ 功能单元信息使用对业务用户毫无意义的工程术语进行标记 | ### 状态管理反模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → [关注点分离](/docs/architect/zh-cn/well-architected/guide/composable#分离问题) → [状态管理](/docs/architect/zh-cn/well-architected/guide/composable#状态管理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | --------------------------------------------------------------- | | 平台 \| Apex | 不使用保存点和回滚行为 | | 平台 \| 设计标准 | 设计标准不存在或未处理状态/无状态模式和用例 | | 平台 \| 文档 | 组件文档不存在 | | 平台 \| 文档 | 组件文档描述了实施的有状态/无状态模式,但这是定义出现的唯一位置 | | 平台 \| 文档 | ⚠ 无法搜索特定模式和/或搜索无助于识别使用该模式的所有组件 | | 平台 \| 流 | 不使用回滚记录元素 | --- # 可组合 - 交互性 ### API 管理模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → [交互性](/docs/architect/zh-cn/well-architected/guide/composable#交互性) → [API 管理](/docs/architect/zh-cn/well-architected/guide/composable#api-管理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| 业务 | ✅ 客户端应用程序使用最新的 API 版本调用 Salesforce 客户端应用程序调用 Salesforce Platform API 会定期更新他们正在使用的 API 版本 | | 平台 \| 设计标准 | ✅ 存在跨组件通信的清除协议(即 API) | | 平台 \| 设计标准 | ✅ 协议/API 在生成器可以搜索和查找的逻辑组中概述 | | 平台 \| 设计标准 | ✅ 协议/API 定义变量数据类型、变量名称、必填或可选内容,并提供何时使用的清晰描述 | | 平台 \| 文档 | ✅ 可以搜索特定的 API 或协议,并确定实施它的组件 | | 平台 \| 文档 | ✅ 每个组件的文档都清楚地列出了哪些 API/通信协议已经实施 | | 平台 \| 组织 | ✅ 内部通信的 API 消息格式和变量使用自定义元数据类型定义 | | 平台 \| 组织 | ✅ 内部通信的 API 消息格式和变量由平台事件定义 | | 平台 \| 组织 | ✅ 代码和声明性自定义引用适当的自定义元数据类型(或平台事件),以便发送或接收信息 | ### 消息传递和事件模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → [交互性](/docs/architect/zh-cn/well-architected/guide/composable#交互性) → [消息传递和事件](/docs/architect/zh-cn/well-architected/guide/composable#消息传递和事件)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | Data 360 \| 组织 | ✅ 将数据操作与平台事件一起使用,以重用现有集成模式 利用平台事件使外部系统可以使用数据操作 利用现有的发布子 API 和事件中继集成 | | 平台 \| Apex | ✅ 自定义事件定义的范围有限(未在代码中定义系统范围的事件或消息) | | 平台 \| Apex | ✅ Apex 中的全系统消息传递或事件服务以使它们在 Salesforce 流工具中可用的方式注释 | | 平台 \| 设计标准 | ✅ 对于何时使用同步模式(消息传递)和异步模式(事件),存在明确的标准 | | 平台 \| 设计标准 | ✅ 事件和消息结构存在明确的标准 | | 平台 \| 流 | ✅ Salesforce 流工具引用全系统消息传递或事件服务 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 自定义事件定义的范围有限(未在代码中定义系统范围的事件或消息) | | 平台 \| 组织 | ✅ 流和代码中出现一致的消息传递和事件模式 | | 平台 \| 平台事件 | ✅ 用于内部系统消息传递的平台事件明确标记 | --- ### API 管理反模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → [交互性](/docs/architect/zh-cn/well-architected/guide/composable#交互性) → [API 管理](/docs/architect/zh-cn/well-architected/guide/composable#api-管理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| 业务 | ⚏ 客户端应用程序使用过时的 API 版本调用 Salesforce 客户端应用程序调用 Salesforce Platform API 需要定期更新他们正在使用的 API 版本到最新版本 | | 平台 \| 设计标准 | 设计标准不存在或未定义 API 和用例 | | 平台 \| 文档 | 组件文档不存在 | | 平台 \| 文档 | 组件文档描述了在组件中实施的 API,但这是 API 定义出现的唯一位置 | | 平台 \| 文档 | 无法搜索特定 API 或协议,和/或搜索无助于识别已实施 API 或协议的组件 | | 平台 \| 组织 | ⚏ API 专为 Salesforce 与外部系统之间的通信定义 | | 平台 \| 组织 | 系统组件之间的通信(代码和声明性自定义)是临时的 | ### 消息传递和事件反模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [可组合](/docs/architect/zh-cn/well-architected/guide/composable) → [交互性](/docs/architect/zh-cn/well-architected/guide/composable#交互性) → [消息传递和事件](/docs/architect/zh-cn/well-architected/guide/composable#消息传递和事件)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------------------------ | | 平台 \| Apex | 系统范围的消息和/或事件结构在代码中定义 | | 平台 \| Apex | Apex 中定义的全系统事件或消息结构在流等工具中不可用 | | 平台 \| 设计标准 | 设计标准不存在,或者缺乏同步与异步模式的明确标准,以及消息或事件结构的明确标准 | | 平台 \| Lightning Web 组件 (LWC) | 系统范围的消息和/或事件结构在代码中定义 | | 平台 \| 组织 | 不同的消息传递和事件模式策略出现在流和代码中 | | 平台 \| 平台事件 | 用于内部系统消息传递的平台事件未明确标记或不存在 | --- # 可靠 - 可扩展性 ### 数据建模模式 了解有关架构良好的[可信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → 可[扩展性](/docs/architect/zh-cn/well-architected/guide/reliable#可扩展性) → [数据建模](/docs/architect/zh-cn/well-architected/guide/reliable#数据建模)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | Data 360 \| 组织 | ✅ 在映射数据转换存在之前,数据转换用于非标准化数据,以转换源数据,这样所有联系点都可以单独接收到标准联系点对象中 | | 平台 \| 业务 | ✅ 低代码生成器了解 Salesforce 支持的不同字段类型,并在选择字段数据类型之前评估报表和加密要求 | | 平台 \| 业务 | ✅ 在选择建立对象之间的主-详细信息关系之前,评估共享和数据偏差的影响 | | 平台 \| 数据模型 | ✅ 表格已针对比例进行非标准化 | | 平台 \| 数据模型 | ✅ 尽可能使用标准对象 | | 平台 \| 设计标准 | ✅ 存在业务理由支持自定义对象的标准和指南 | ### 数据量模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [可扩展性](/docs/architect/zh-cn/well-architected/guide/reliable#可扩展性) → [数据量](/docs/architect/zh-cn/well-architected/guide/reliable#数据量)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 测试计划 | ✅ 批量负载计算考虑了第 0 天的数据负载 您已经为解决方案上线之前通常需要迁移的大数据量做好了计划(也称为第 0 天),并且已经确认您不会接近每次计划运行的最大文件大小和最大文件数量 | | 平台 \| Apex | ✅ 在数据偏差令人担忧的情况下,存在在多个父级记录之间分配子级记录数量的逻辑 | | 平台 \| Apex | ✅ 当通过集成导入或复制时,将所有记录分配给适当的人工用户的逻辑存在 | | 平台 \| 业务 | ✅ 您已记录并实施数据归档和清除策略 | | 平台 \| 业务 | ✅ 批量数据加载策略已优化服务器消耗 批量加载策略考虑了加载时间、数据序列、记录锁定、自动化和批量共享流程,以实现高效的服务器消耗 | | 平台 \| 数据 | ✅ 没有父级记录超过 10,000 个子级记录 | | 平台 \| 数据 | ✅ 没有用户被分配到超过 10,000 个相同对象类型的记录 | | 平台 \| 数据 | ✅ 不存在超过 10,000 个记录包含指向相同记录的查找字段的实例 | | 平台 \| 数据 | ✅ 在工作高峰时段不会出现将数据批量加载到生产中 | | 平台 \| 数据 | ✅ 批量数据加载根据`ParentId`字段值进行批量排序 | | 平台 \| 数据 | ✅ 批量数据加载仅包含业务决策所需的最少数据 | | 平台 \| 流 | ✅ 在数据偏差令人担忧的情况下,存在在多个父级记录之间分配子级记录数量的逻辑 | | 平台 \| 流 | ✅ 当通过集成导入或复制时,将所有记录分配给适当的人工用户的逻辑存在 | | 平台 \| 组织 | ✅ 在大型数据加载期间,数据后处理被延迟 后处理自动化被延迟到大型数据加载结束后。 | | 平台 \| 测试计划 | ✅ 在完全复制 Sandbox 中测试批量 API 加载策略 在完全复制 Sandbox 中使用批量 API 计划数据加载时,识别模式、加载顺序和可能出现的任何锁定问题。 | --- ### 数据建模反模式 了解有关架构良好的[可信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → 可[扩展性](/docs/architect/zh-cn/well-architected/guide/reliable#可扩展性) → [数据建模](/docs/architect/zh-cn/well-architected/guide/reliable#数据建模)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------- | | 平台 \| 业务 | ⚠ 低代码生成器选择数据类型,而不评估下游报告和加密要求 | | 平台 \| 业务 | 在对象之间建立主-详细信息关系之前,不考虑共享和数据偏差 | | 平台 \| 数据模型 | 表格已标准化,以避免冗余 | | 平台 \| 数据模型 | ⚠ 您已复制标准对象 | | 平台 \| 设计标准 | 不存在创建自定义对象的标准 | ### 数据量反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [可扩展性](/docs/architect/zh-cn/well-architected/guide/reliable#可扩展性) → [数据量](/docs/architect/zh-cn/well-architected/guide/reliable#数据量)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 测试计划 | 您的批量负载计算不包括第 0 天的数据负载,不会执行第 0 天负载计算,或者如果有记录,接近每次同时运行的文件大小和文件的最大值 | | 平台 \| Apex | 通过数据加载或集成创建的记录被分配给通用“集成用户” | | 平台 \| Apex | 子记录被任意分配给父记录,而不管已经分配的现有子记录的数量如何 | | 平台 \| 业务 | ⚏ 您没有数据归档和清除策略,或者您的策略已记录但未实施 | | 平台 \| 业务 | 在执行批量数据加载之前,不考虑批量数据加载的时间、数据序列、记录锁定、自动化和批量共享流程 | | 平台 \| 数据 | ⚏ 将数据批量加载到生产中发生在工作高峰时段 | | 平台 \| 数据 | 批量数据加载不限于业务决策所需的最少数据 | | 平台 \| 数据 | 存在超过 10,000 个子记录的记录 | | 平台 \| 数据 | 用户被分配到超过 10,000 个相同类型的记录 | | 平台 \| 数据 | 存在超过 10,000 个记录具有指向相同记录的查找字段的实例 | | 平台 \| 数据 | 批量数据加载不会根据`ParentId`字段值进行批量排序 | | 平台 \| 流 | 通过数据加载或集成创建的记录被分配给通用“集成用户” | | 平台 \| 流 | 子记录被任意分配给父记录,而不管已经分配的现有子记录的数量如何 | | 平台 \| 组织 | 批量 API 加载策略在部分复制 Sandbox 中测试批量 API 加载测试,以确定对部分复制 Sandbox 中的数据子集执行批量加载的时间。 | | 平台 \| 组织 | 与锁定记录的其他操作并行执行批量数据加载与数据加载并行运行批处理 Apex | | 平台 \| 组织 | 选择 API 而不考虑数据集的大小 SOAP API 用于大于 500000 条记录的数据加载 | | 平台 \| 组织 | 报告要求推动角色层次结构设计 使用报告要求确定您需要的角色层次结构级别或数量 | | 平台 \| 组织 | 角色层次结构包含空角色 为未来创建空占位符角色 | | 平台 \| 组织 | 角色层次结构模仿您的组织图表 您在角色层次结构中复制了您的组织结构,为贵公司的每个头衔创建了单独的角色 | --- # 可靠 - 可用性 ### 故障缓解模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [可用性](/docs/architect/zh-cn/well-architected/guide/reliable#可用性) → [故障缓解](/docs/architect/zh-cn/well-architected/guide/reliable#故障缓解)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 平台 \| 业务 | ✅ 经常测试故障缓解计划 定期测试故障缓解计划(每 1-2 年一次),在重大事件后作为事后工作的一部分进行反应性测试,并在重大业务或 IT 事件前主动进行测试 | | 平台 \| 组织 | ✅ 缓解控制立即到位,随着时间的推移而成熟,并尽早纳入自动化 | | 平台 \| 组织 | 使用 Proactive Monitoring 或查询外部计划作业执行的 AsyncApexJob 来监控异步进程。设置警报,以尽早发现问题,从而加快检测时间 (TTD) 和参与时间 (TTE) | | 平台 \| 组织 | ✅ 经过培训的最终用户子集创建列表视图、报表和仪表板 经过培训的最终用户创建报表、列表视图和仪表板,作为组织范围报表策略的一部分,该策略包括文档化指导原则和定期审查 | | 平台 \| 组织 | ✅ 故障点触发器及其相应的缓解计划按人员、流程和技术分类 | ### 风险管理模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [可用性](/docs/architect/zh-cn/well-architected/guide/reliable#可用性) → [风险管理](/docs/architect/zh-cn/well-architected/guide/reliable#风险管理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| 业务 | 正在使用既定风险评估框架 | | 平台 \| 业务 | ✅ 风险评估由多个相关方签署 风险评估由多个业务和技术相关方审查和签署 | | 平台 \| 业务 | 风险评估框架遵循行业和公司标准 您的风险评估框架遵循公司标准,并遵循以下任何行业和监管标准:ISO/IEC 27001、NIST ⁇ Framework (CSF)、COBIT(信息和相关技术的控制目标)、ISO/IEC 27005、GDPR(通用数据保护条例)、OWASP(开放 Web 应用程序安全项目)、CSA Cloud 控制矩阵 (CCM)、PCI DSS(支付卡行业数据安全标准)或 SOC 2(系统和组织控制) | | 平台 \| 业务 | ✅ 在引入重大变更之前评估风险 在业务或实施发生任何重大变更之前主动评估风险。签名成功客户利用关键事件管理。 | | 平台 \| 业务 | ✅ 提前计划季节性高峰 提前计划高峰使用事件(例如流量的季节性高峰)。签名成功客户利用关键事件管理。 | | 平台 \| 业务 | ✅ 风险评估经常被审核 风险评估在重大事件或完结电话后被动审核,在新产品、功能推出或新业务部门上线前主动审核,在重大业务事件(季节性高峰、重大业务变化)前主动审核,并定期(每 1-2 年)审核 | | 平台 \| 业务 | ✅ 风险分为人员、流程和技术领域 | | 平台 \| 文档 | ✅ 根据客户影响分类和评估风险严重性 | | 平台 \| 文档 | ✅ 风险缓解和响应计划优先,重点关注最高优先级的风险 | --- ### 故障缓解反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [可用性](/docs/architect/zh-cn/well-architected/guide/reliable#可用性) → [故障缓解](/docs/architect/zh-cn/well-architected/guide/reliable#故障缓解)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | 平台 \| 业务 | 故障缓解计划未经过充分测试 故障缓解计划从未经过测试,或仅在初始设计/构建阶段后经过测试 | | 平台 \| 业务 | 季节性高峰不会提前考虑 高峰使用事件(例如流量的季节性高峰)不会提前计划 | | 平台 \| 组织 | ⚠ 自动化不用于缓解 | | 平台 \| 组织 | 故障点触发器未分类;缓解方法是临时的或不存在的 | | 平台 \| 组织 | ⚠ 缓解控制不会重新讨论或演变 | | 平台 \| 组织 | 异步进程未主动监控异步进程依赖于作为异步进程本身一部分的自定义错误日志记录机制,或者根本没有监控 | | 平台 \| 组织 | 最终用户全权负责列表视图、报表和仪表板最终用户可以自由创建公用报表、列表视图和仪表板,并且不存在对这些元数据项目的定期性能审查 | ### 风险管理反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [可用性](/docs/architect/zh-cn/well-architected/guide/reliable#可用性) → [风险管理](/docs/architect/zh-cn/well-architected/guide/reliable#风险管理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------- | | 平台 \| 业务 | ⚏ 风险未明确识别 | | 平台 \| 业务 | ⚏ Salesforce 的风险评估框架是临时的 | | 平台 \| 业务 | 您的风险评估框架是由一个团队孤立地开发的,不符合企业准则或行业标准 | | 平台 \| 业务 | 风险管理被视为“一次性”活动 风险评估仅执行一次,并且/或者您的风险评估框架未定期更新 | | 平台 \| 文档 | 评估风险严重性或类别时不考虑客户视角 | | 平台 \| 文档 | 风险缓解和响应计划尝试捕获可以想象的每个风险 | --- # 可靠 - 性能 ### 延迟模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [性能](/docs/architect/zh-cn/well-architected/guide/reliable#性能) → [延迟](/docs/architect/zh-cn/well-architected/guide/reliable#延迟)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 组织 | ✅ 数据流尽可能使用更新插入而不是完全刷新 完全刷新会完全清除表,然后使用数据重新填充。除非您真正需要完全刷新,否则选择更新插入,以仅获取新的和/或更新的记录。这将缩短处理时间并减少信用使用 | | Einstein \| 客服人员 | ✅ 客服人员分配到指定主题的操作不超过 15 个 客服人员生成器的“此主题的操作”选项卡中列出 15 个或更少的操作 | | Einstein \| 搜索索引 | ✅ 从搜索索引中忽略低基数字段以减少客服人员延迟 引入非常低基数(列表中不同元素的数量)或低熵(列表条目集中在几个值周围)的字段会影响相关性和延迟 使用搜索索引生成器中的高级设置,以仅选择相关字段进行分块。这将减少搜索索引的大小,并减少客服人员的延迟 | | 平台 \| 流 | ✅ 指定获取记录中的字段以提高性能 当您指定在获取记录元素中存储哪些字段时,可以减少从服务器返回并传输到客户端的数据量。如果数据表消耗此元素的输出,您可能会看到组件的性能显著提高 | | 平台 \| 组织 | ✅ 报表具有单一特定目的 | | 平台 \| 组织 | ✅ 报表包含决策所需的最小行数和列数 | | 平台 \| 组织 | ✅ 筛选器使用等于/不等于 | | 平台 \| 组织 | ✅ 筛选器不包含公式字段 | | 平台 \| 组织 | ✅ 共享模式尽可能简化 | | 平台 \| 组织 | ✅ 使用 Lightning Web 组件的自定义 UI 组件 | | 平台 \| 组织 | ✅ LWC 使用 Lightning 数据服务进行数据操作 | | 平台 \| 组织 | ✅ 排序和筛选列表数据在客户端使用 JavaScript 处理 | | 平台 \| 组织 | ✅ 对列表视图、报表和仪表板进行性能审计 定期检查会识别性能问题(高运行时/数据库 CPU 消耗),并更新或删除性能最差的列表视图、报表和仪表板 | | 平台 \| 组织 | ✅ Salesforce Edge 已启用 | ### 吞吐量模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [性能](/docs/architect/zh-cn/well-architected/guide/reliable#性能) → [吞吐量](/docs/architect/zh-cn/well-architected/guide/reliable#吞吐量)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| Apex | ✅ 批量 API 批处理大小会仔细调整 批处理大小可能会因对象的性质、操作和作为对象基础的自动化程度而异。调整批次大小是一门艺术,而不是一门科学,以便它执行尽可能多的工作,但不超过 10 分钟的执行时间非常重要 | | 平台 \| 设计标准 | ✅ 如何使用平台缓存的指导遵循平台缓存最佳实践 | | 平台 \| 组织 | ✅ DML 或数据库方法始终针对 Apex 中的集合进行操作 | | 平台 \| 组织 | ✅ SOQL 语句是选择性的 SOQL 中不使用`LIKE`比较或部分文本比较 | | 平台 \| 组织 | ✅ SOQL 语句是选择性的 比较运算符在 SOQL 语句中使用正逻辑(例如 `INCLUDES`、`IN`)作为主要或唯一逻辑 | | 平台 \| 组织 | ✅ SOQL 语句是选择性的 在 SOQL 语句中使用 `= NULL`,`!= NULL` 很少,并且/或者总是跟在正比较运算符之后 | | 平台 \| 组织 | ✅ SOQL 语句是选择性的 SOQL 中没有显示 `LIMIT 1` 语句 | | 平台 \| 组织 | ✅ 循环中未显示 SOQL | | 平台 \| 组织 | ✅ 所有通配符条件都显示在 SOSL 中 | | 平台 \| 组织 | ✅ 批量化用于数据和系统操作 | | 平台 \| 组织 | ✅ 尽可能支持异步处理 | | 平台 \| 组织 | ✅ 配置平台缓存分区 | | 平台 \| 组织 | ✅ SOQL 语句是选择性的 | | 平台 \| 组织 | ✅ SOQL 语句是选择性的 SOQL 语句中不使用 `ALL ROWS` 关键字 | --- ### 延迟反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [性能](/docs/architect/zh-cn/well-architected/guide/reliable#性能) → [延迟](/docs/architect/zh-cn/well-architected/guide/reliable#延迟)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 组织 | 数据流刷新模式默认设置为完全刷新 所有或大多数数据流的刷新模式为完全刷新 | | Einstein \| 客服人员 | 客服人员拥有超过 15 个分配给指定主题的操作 客服人员生成器的“此主题的操作”选项卡中列出超过 15 个操作 | | 平台 \| Lightning Web 组件 (LWC) | 假设应用程序事件仅在使用组件时执行 在 Lightning Console 中,未聚焦选项卡中包含的组件仍可以监听应用程序事件,即使它们不可见 | | 平台 \| 组织 | ⚏ 共享模型很复杂 | | 平台 \| 组织 | 自定义 UI 组件使用 Aura 或 Visualforce | | 平台 \| 组织 | LWC 使用 Apex 进行数据操作 | | 平台 \| 组织 | 排序和筛选列表数据在服务器端使用 Apex 处理 | | 平台 \| 组织 | 使用的筛选器包含/不包含 | | 平台 \| 组织 | 筛选器包含公式字段 | | 平台 \| 组织 | ⚏ Salesforce Edge 未启用 | | 平台 \| 组织 | 报表具有多种用途 | | 平台 \| 组织 | 报表包含决策不需要的额外行和列 | ### 吞吐量反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [可靠](/docs/architect/zh-cn/well-architected/guide/reliable) → [性能](/docs/architect/zh-cn/well-architected/guide/reliable#性能) → [吞吐量](/docs/architect/zh-cn/well-architected/guide/reliable#吞吐量)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------ | | 平台 \| Apex | 从单个同步操作中排队多个未来或可排队方法 从单个同步操作中排队多个异步方法 | | 平台 \| Apex | 父/子对跨批量 API 批次拆分 多个批次包含与相同父级相关的子记录 | | 平台 \| 设计标准 | ⚠ 如果有平台缓存使用指南,不清楚或与推荐的最佳实践不一致 | | 平台 \| 组织 | SOQL 语句是非选择性`= NULL`,`!= NULL`条件用作 SOQL 语句中的主要或唯一比较运算符 | | 平台 \| 组织 | SOQL 语句是 SOQL 中出现的非选择性`LIMIT 1`语句 | | 平台 \| 组织 | SOQL 语句是非选择性`ALL ROWS`关键字用于 SOQL 语句 | | 平台 \| 组织 | DML 语句未批量化 | | 平台 \| 组织 | 支持同步进程 | | 平台 \| 组织 | ⚏ SOQL 显示在循环中 | | 平台 \| 组织 | 规划异步操作在特定时间结束 设计流程或解决方案,假设异步操作将在特定时间或给定 SLA 内结束。 | | 平台 \| 组织 | 从同步操作中排队批处理作业 从同步最终用户活动或集成 API 调用中启动批处理 Apex 作业 | | 平台 \| 组织 | DML 或数据库方法针对 Apex 中的单个记录进行操作 | | 平台 \| 组织 | SOQL 语句是非选择性`LIKE`,通配符筛选条件显示在 SOQL 语句中 | | 平台 \| 组织 | SOQL 语句是非选择性的比较使用 `NOT`、`NOT IN` 条件作为 SOQL 语句中的主要或唯一比较运算符 | | 平台 \| 组织 | Visualforce 视图状态用于应用程序缓存 | | 平台 \| 组织 | ⚏ SOSL 很少或没有一致地用于通配符选择条件 | | 平台 \| Visualforce | Visualforce 远程处理期间轮询过多 高流量 Visualforce 页面轮询数据库的频率超过每五分钟一次 | --- # 合规 - 可访问性 ### 数据输入模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [可访问性](/docs/architect/zh-cn/well-architected/guide/compliant#可访问性) → [数据输入](/docs/architect/zh-cn/well-architected/guide/compliant#数据输入)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | --------------------------------------------------- | | 平台 \| 设计标准 | ✅ 列出可用于标准键盘和鼠标之外的数据输入的所有设备 | | 平台 \| 设计标准 | ✅ 列出文本值及其翻译成所有支持的语言 | | 平台 \| 组织 | ✅ 支持语言的翻译存储在翻译工作台中 | | 平台 \| 测试计划 | ✅ 测试步骤包括使用多种类型的输入设备输入数据 | | 平台 \| 测试计划 | ✅ 测试步骤包含多种语言的数据输入 | ### 导航模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [可访问性](/docs/architect/zh-cn/well-architected/guide/compliant#可访问性) → [导航](/docs/architect/zh-cn/well-architected/guide/compliant#导航)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------- | | 平台 \| 设计标准 | ✅ 所有可用于导航的设备(而不仅仅是标准键盘和鼠标)都清楚地列出 | | 平台 \| 设计标准 | ✅ UI/UX 标准指定所有导航控件的类型和样式 | | 平台 \| 设计标准 | ✅ 批准传达含义或状态的视觉提示的类型被清楚地列出,颜色不是主要提示 | | 平台 \| 测试计划 | ✅ 测试计划包括使用 UI/UX 测试,以确保一致的导航路径 | | 平台 \| 测试计划 | ✅ 测试步骤包括使用多种类型的输入设备导航 | --- ### 数据输入反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [可访问性](/docs/architect/zh-cn/well-architected/guide/compliant#可访问性) → [数据输入](/docs/architect/zh-cn/well-architected/guide/compliant#数据输入)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------ | | 平台 \| 设计标准 | ⚠ 仅列出部分或未列出可用于标准键盘和鼠标之外的数据输入的设备 | | 平台 \| 设计标准 | 支持的语言与要翻译的 UI 元素一起列出 | | 平台 \| 组织 | 翻译存储在自定义标签中 | | 平台 \| 测试计划 | ⚏ 不包括可访问性测试,或对可访问数据输入的测试是临时进行的 | ### 导航反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [可访问性](/docs/architect/zh-cn/well-architected/guide/compliant#可访问性) → [导航](/docs/architect/zh-cn/well-architected/guide/compliant#导航)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------- | | 平台 \| 设计标准 | 设计标准不存在或未考虑导航控制的可访问性要求 | | 平台 \| 设计标准 | 导航的 UI/UX 标准不一致 | | 平台 \| 设计标准 | 意义或状态的视觉提示依赖于颜色,或者没有生成器视觉提示的明确列表 | | 平台 \| 测试计划 | ⚏ 不包括可访问性测试,或对可访问导航的测试是临时进行的 | --- # 合规 - 法律合规 ### 数据隐私模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [法律合规](/docs/architect/zh-cn/well-architected/guide/compliant#法律遵守) → [数据隐私](/docs/architect/zh-cn/well-architected/guide/compliant#数据隐私)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------- | | Einstein \| Einstein Trust 层 | ✅ 按合规类别屏蔽字段 Einstein Trust 层已根据您的业务规则和字段的合规类别自定义为屏蔽字段 | | Einstein \| Einstein Trust 层 | ✅ 按敏感级别屏蔽字段 Einstein Trust 层已根据您的业务规则和字段的敏感级别自定义屏蔽字段 | | 平台 \| 文档 | ✅ 您拥有包含字段级名称、描述和分类的最新数据字典 | | 平台 \| 文档 | ✅ 您拥有最新的安全矩阵,可确定哪些用户可以访问哪些数据 | | 平台 \| 文档 | ✅ 您拥有最新的设计文档,包括为满足监管要求而创建的任何自动化的标准和图表 | | 平台 \| 组织 | ✅ 所有包含敏感信息或受数据隐私条例约束的对象和字段都配置了合规分类、数据所有者、数据敏感级别和字段使用情况 | ### 本地化模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [法律合规](/docs/architect/zh-cn/well-architected/guide/compliant#法律遵守) → [本地化](/docs/architect/zh-cn/well-architected/guide/compliant#本地化)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------- | | 平台 \| 文档 | ✅ 您的组织策略概述了数据的存储和维护位置,以符合所有适用的数据驻留要求 | | 平台 \| 文档 | ✅ 您有一个集成策略,概述了跨境复制数据的可接受场景和流程 | | 平台 \| 文档 | ✅ 您有一个概述区域、国家和全球级别的粒度报表和仪表板级别的分析策略 | --- ### 数据隐私反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [法律合规](/docs/architect/zh-cn/well-architected/guide/compliant#法律遵守) → [数据隐私](/docs/architect/zh-cn/well-architected/guide/compliant#数据隐私)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------------------- | | 平台 \| 文档 | 数据字典不存在或未保持最新 | | 平台 \| 文档 | 共享和可见性文档不存在或未保持最新 | | 平台 \| 文档 | 满足监管要求的自动化设计标准、图表和文档不存在或未保持最新 | | 平台 \| 组织 | 包含敏感信息或受数据隐私条例约束的对象和字段缺少合规分类、数据所有者、数据灵敏性级别或字段使用情况的配置 | ### 本地化反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [法律合规](/docs/architect/zh-cn/well-architected/guide/compliant#法律遵守) → [本地化](/docs/architect/zh-cn/well-architected/guide/compliant#本地化)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------- | | 平台 \| 文档 | 您没有 Analytics 策略,或者您的 Analytics 策略没有解决数据本地化和驻留要求 | | 平台 \| 文档 | ⚠ 您没有组织策略,或者您的组织策略没有解决数据本地化和驻留要求 | | 平台 \| 文档 | ⚏ 您没有集成策略,或者您的集成策略没有解决数据本地化和驻留要求 | --- # 合规 - 道德标准 ### 人工智能模式 了解有关架构良好、[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [道德标准](/docs/architect/zh-cn/well-architected/guide/compliant#道德标准) → [人工智能](/docs/architect/zh-cn/well-architected/guide/compliant#人工智能)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | Einstein \| 设计标准 | ✅ 生成式响应始终识别 AI 模型使用的数据源 | | Einstein \| 设计标准 | ✅ 已记录可用于/不可用于提示引擎错误的数据集 | | Einstein \| 设计标准 | ✅ 机器人和生成式 AI 响应向用户明确识别 | | Einstein \| 设计标准 | ✅ 必须为用户识别 AI 的点被明确界定 | | Einstein \| 设计标准 | ✅ 明确定义了何时及如何使用生成式 AI 免责声明的标准 | | Einstein \| 设计标准 | ✅ 对于如何在 AI 解决方案设计中记录人员参与点存在明确要求 | | Einstein \| 设计标准 | ✅ 没有人为参与点,没有生成式响应直接发送到最终用户 | | Einstein \| 设计标准 | ✅ AI 解决方案设计中存在记录直接和间接反馈路径的标准 | | Einstein \| 设计标准 | ✅ AI 应用程序的策略和批准的用例清晰易懂 | | Einstein \| 设计标准 | ✅ 已记录聊天机器人消息传递和对话流的标准 | | Einstein \| 文档 | ✅ 涉及 AI 功能的配置和自定义文档包含所有流程逻辑的详细描述,并存储在法律团队或审计员可以访问的中心位置 | | Einstein \| 文档 | ✅ 驱动预测和推荐的模型被清楚地记录下来,包括任何适用的数据段 | | Einstein \| 文档 | ✅ 对话逻辑和聊天机器人消息被完整记录 | | Einstein \| 文档 | ✅ 流程到位,以监控贵组织的 AI 模型的数据漂移、公平和偏见分数的变化、准确性和稳健性 | | Einstein \| 文档 | ✅ 为所有 AI 流程使用的训练、评估和测试数据保留描述 | | Einstein \| 文档 | ✅ 为任何 AI 相关数据清理保留描述,以及偏见测试、相关结果和性能/准确性分数(例如,F1 分数) | | Einstein \| 组织 | ✅ 提示模板的质量测试 提示模板被测试,这些测试的结果记录了提示模板响应的相关性、完整性、风格/语气、事实准确性、一致性、毒性和偏见 | | Einstein \| 组织 | ✅ 生成式 AI 用作人类的助手 当从生成式 AI 开始时,请确保有一个“人类在舵 ” , 谁可以查看回答的准确性和实用性。 | | Einstein \| 组织 | ✅ AI 模型使用您 Trust 的数据上下文使用零方(由客户直接提供)或第一方(根据客户与业务的互动收集)数据提供给生成 AI | ### 公司策略模式 了解有关架构良好[、受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [道德标准](/docs/architect/zh-cn/well-architected/guide/compliant#道德标准) → [公司政策](/docs/architect/zh-cn/well-architected/guide/compliant#公司策略)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------- | | 平台 \| 设计标准 | ✅ 标准包含受公司政策影响领域的明确指导 | | 平台 \| 文档 | ✅ 配置和自定义的文档包括对支持的公司值的引用 | | 平台 \| 组织 | ✅ 受公司策略相关合规性约束的所有对象和字段都配置了合规性分类、数据所有者、数据灵敏性级别和字段使用情况 | --- ### 人工智能反模式 了解有关架构良好、[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [道德标准](/docs/architect/zh-cn/well-architected/guide/compliant#道德标准) → [人工智能](/docs/architect/zh-cn/well-architected/guide/compliant#人工智能)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------- | | Einstein \| 设计标准 | 生成式响应不会识别 AI 模型使用的数据源 | | Einstein \| 设计标准 | 机器人和生成式 AI 响应未向用户识别 | | Einstein \| 设计标准 | 生成式响应直接发送到最终用户,无需人工参与 | | Einstein \| 设计标准 | 用于提示工程的数据集未记录 | | Einstein \| 设计标准 | ⚠ 没有记录 AI 解决方案设计中人员参与点的要求 | | Einstein \| 设计标准 | 设计标准未指明必须向用户识别 AI 的点 | | Einstein \| 设计标准 | 缺少有关生成式响应的免责声明 | | Einstein \| 设计标准 | 没有记录 AI 解决方案设计的直接和间接反馈路径的标准 | | Einstein \| 设计标准 | 设计标准不存在或不包含明确的策略和批准的 AI 应用程序用例 | | Einstein \| 设计标准 | 聊天机器人消息传递和对话设计的明确标准不存在(但正在使用聊天机器人) | | Einstein \| 文档 | AI 监控流程不存在或未记录 | | Einstein \| 文档 | 涉及 AI 功能的配置和自定义文档缺失、不完整或存储在无法访问的位置 | | Einstein \| 文档 | ⚠ 在您的组织中实施预测或推荐,而无需记录他们的模型 | | Einstein \| 文档 | ⚏ 有关用于所有 AI 流程的培训、评估和测试数据的信息不清楚或不可用 | | Einstein \| 文档 | 关于 AI 相关数据清理、偏见测试和结果的信息不清楚或不可用 | | Einstein \| 文档 | 聊天机器人在贵组织中实施,无需消息和对话流文档 | | Einstein \| 提示模板 | AI 依赖第三方数据 提示模板仅依赖第三方数据,没有任何零或第一方数据 | ### 公司策略反模式 了解有关架构良好[、受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [合规](/docs/architect/zh-cn/well-architected/guide/compliant) → [道德标准](/docs/architect/zh-cn/well-architected/guide/compliant#道德标准) → [公司政策](/docs/architect/zh-cn/well-architected/guide/compliant#公司策略)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------------- | | 平台 \| 设计标准 | 设计标准不存在,或未对受公司政策约束的领域提供明确指导 | | 平台 \| 文档 | 配置和自定义文档不引用公司价值或策略 | | 平台 \| 组织 | ⚏ 受公司策略相关合规性约束的对象缺少合规性分类、数据所有者、数据灵敏性级别或字段使用情况的配置 | --- # 安全 - 会话安全性 ### 设备访问模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [会话安全](/docs/architect/zh-cn/well-architected/guide/secure#会话安全性) → [设备访问](/docs/architect/zh-cn/well-architected/guide/secure#设备访问权限)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | 平台 \| 文档 | ✅ 安全角色清楚地映射到适当的设备使用情况和策略 | | 平台 \| 文档 | ✅ 设备策略清晰可发现 | | 平台 \| 组织 | ✅ Salesforce 移动连接的应用程序配置需要 PIN/密码在不活动后解锁 | | 平台 \| 组织 | ✅ 如果业务需求需要严格控制可以访问 Salesforce 移动设备的用户,启用 API 访问控制,并将权限集分配给 Salesforce 移动应用程序的所有用户 | ### 会话管理模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [会话安全](/docs/architect/zh-cn/well-architected/guide/secure#会话安全性) → [会话管理](/docs/architect/zh-cn/well-architected/guide/secure#会话管理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| Apex | ✅ 如果存在自定义登录流,所有相关自定义代码会使用适当的 SessionManagement 方法来分配会话级安全性 | | 平台 \| Aura | ✅ 如果存在自定义登录流,请使用具有必要`SessionManagement`方法的 Apex 控制器来分配会话级安全性 | | 平台 \| 设计标准 | ✅ 安全角色清楚地列出每个角色批准的会话类型和超时/持续时间设置 | | 平台 \| 设计标准 | ✅ 为需要提升会话级安全性的活动定义了标准 | | 平台 \| 设计标准 | ✅ 为需要分配提升权限的活动定义标准 | | 平台 \| 设计标准 | ✅ 连接的应用程序范围和令牌管理策略清晰可发现 | | 平台 \| 文档 | ✅ 连接的应用程序范围和令牌管理策略清晰可发现 | | 平台 \| 文档 | ✅ 登录时间已指定(或标识为不需要) | | 平台 \| Lightning Web 组件 (LWC) | ✅ 如果存在自定义登录流,请使用具有必要`SessionManagement`方法的 Apex 控制器来分配会话级安全性 | | 平台 \| 组织 | ✅ 如果用户从防火墙后访问 Salesforce,防火墙会使用必填域的允许列表,而不是 IP 地址来保护与 Salesforce 的通信 | | 平台 \| 组织 | ✅ 非活动会话超时间隔不超过默认值(2 小时) | | 平台 \| 组织 | ✅ 启用以下所有设置:- 设置页面的点击劫持保护-非设置 Salesforce 页面的点击劫持保护-跨站点请求伪造 (CSRF) 保护-跨站点脚本 (XSS) 保护-启用内容嗅探保护-引用 URL 保护-在用户重定向到 Salesforce 外部之前警告他们 | | 平台 \| 组织 | ✅ 会话审计显示用户仅通过预期的会话类型访问 Salesforce | | 平台 \| 组织 | ✅ 对于“仅 API 用户”访问权限,有一个清晰有效的权限集(“仅 API”权限集设置为真),并且所有集成和自动化用户都被分配 | ### 威胁检测和响应模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [会话安全](/docs/architect/zh-cn/well-architected/guide/secure#会话安全性) → [威胁检测和响应](/docs/architect/zh-cn/well-architected/guide/secure#threat-detection-response)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | Einstein \| 客服人员 | ✅ 客服人员事件日志包含对话数据启用丰富事件日志的设置,除非有重要原因需要屏蔽对话数据 | | Einstein \| Einstein Trust 层 | 生成式 AI 功能定期审计 Einstein 生成式 AI 审计数据从 Einstein 反馈设置页面启用。生成式 AI 对话,包括提示及其响应,将定期进行审计和审查 | | 平台 \| 公司 | ✅ 审计数据在业务利益相关者可以理解和访问的报表中可用 | | 平台 \| 公司 | ✅ 定期审查审计历史和报告 | | 平台 \| 文档 | ✅ 所有自动回复都清晰记录 | | 平台 \| 文档 | ✅ 记录查看 Salesforce 内部可用日志的步骤 | | 平台 \| 文档 | ✅ 已为数据模型中的所有对象指定审计级别 | | 平台 \| 文档 | ✅ 安全策略包含应触发响应的事件列表,以及适当的响应类型 | | 平台 \| 组织 | ✅ 自动化到位,通过禁用用户帐户或实时阻止访问资源(如果检测到异常使用)来应对威胁 | | 平台 \| 组织 | ✅ 通知和警报被配置为通知适当的用户异常活动 | | 平台 \| 组织 | ✅ 对包含专用或敏感数据的所有字段启用字段历史跟踪 | --- ### 设备访问反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [会话安全](/docs/architect/zh-cn/well-architected/guide/secure#会话安全性) → [设备访问](/docs/architect/zh-cn/well-architected/guide/secure#设备访问权限)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| 文档 | 安全策略不存在或不包含有关设备访问的信息 | | 平台 \| 组织 | ⚏ Salesforce 移动连接的应用程序未配置为需要 PIN/密码解锁才能不活动 | | 平台 \| 组织 | ⚏ 业务需求需要严格控制可以访问 Salesforce 移动设备的用户,但未启用 API 访问控制,或权限集未用于控制对 Salesforce 移动应用程序的访问权限 | ### 会话管理反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [会话安全](/docs/architect/zh-cn/well-architected/guide/secure#会话安全性) → [会话管理](/docs/architect/zh-cn/well-architected/guide/secure#会话管理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| Apex | 如果存在自定义登录流,没有分配会话级安全性的逻辑 | | 平台 \| Aura | 如果存在自定义登录流,没有分配会话级安全性的逻辑 | | 平台 \| 设计标准 | ⚏ 没有为需要提升会话级安全性的活动定义标准 | | 平台 \| 设计标准 | ⚏ 没有为需要分配提升权限的活动定义标准 | | 平台 \| 设计标准 | 安全策略不包含有关连接的应用程序范围或令牌管理的信息 | | 平台 \| 设计标准 | 安全角色不存在或缺少有关会话类型和超时/持续时间设置的信息 | | 平台 \| 文档 | 连接的应用程序范围和令牌管理策略未记录 | | 平台 \| Lightning Web 组件 (LWC) | 如果存在自定义登录流,没有分配会话级安全性的逻辑 | | 平台 \| 组织 | 没有定义用户应该拥有哪些会话类型 | | 平台 \| 组织 | ⚠ 集成和自动化用户的“仅限 API”权限不明确或缺失 | | 平台 \| 组织 | ⚠ 没有定期会话审计 | | 平台 \| 组织 | 如果用户从防火墙后访问 Salesforce,防火墙会使用硬编码的 IP 地址来保护进出 Salesforce 的通信 | | 平台 \| 组织 | 非活动会话超时间隔超过默认值(2 小时) | | 平台 \| 组织 | 禁用以下任何设置: - 设置页面的点击劫持保护 - 非设置 Salesforce 页面的点击劫持保护 - 跨站点请求伪造 (CSRF) 保护 - 跨站点脚本 (XSS) 保护 - 启用内容嗅探保护 - 引用 URL 保护 - 在用户重定向到 Salesforce 外部之前警告他们 | ### 威胁检测和响应反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [会话安全](/docs/architect/zh-cn/well-architected/guide/secure#会话安全性) → [威胁检测和响应](/docs/architect/zh-cn/well-architected/guide/secure#threat-detection-response)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------- | | Einstein \| 组织 | 生成式 AI 功能未经过审核 生成式 AI 对话,包括提示及其响应,未定期审核和审核 | | 平台 \| 公司 | 审计数据仅可通过需要主题专业知识才能访问和解释的日志文件获得 | | 平台 \| 公司 | 没有审核审计信息的流程 | | 平台 \| 文档 | 安全策略不存在或不包含有关威胁检测和警报的信息 | | 平台 \| 文档 | 自动回复的文档不存在或不清楚 | | 平台 \| 组织 | 没有自动化来应对威胁 | | 平台 \| 组织 | 通知和警报未配置为通知适当用户异常活动,或存在一些与异常活动相关的通知和警报,但它们是临时的 | | 平台 \| 组织 | 对于包含专用或敏感数据的字段,未始终启用字段历史跟踪 | --- # 安全 - 数据安全 ### 共享和可见性模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [数据安全](/docs/architect/zh-cn/well-architected/guide/secure#数据安全) → [共享和可见](/docs/architect/zh-cn/well-architected/guide/secure#sharing-visibility)性的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 组织 | ✅ 使用数据空间实施数据隔离 数据空间的存在是为了隔离并确保 Data 360 数据的正确可见性 | | Einstein \| 机器人 | ✅ 在机器人用户上下文中运行的机器人发起的流机器人发起的流使用与机器人关联的用户简档和权限集来确定流的对象权限和字段级访问权限。 | | 平台 \| Apex | ✅ 访问数据 (SOQL/SOSL) 或执行数据操作(DML/Database 类方法)的所有代码都与共享关键字一起使用 | | 平台 \| 设计标准 | ✅ 外部用户和内部用户使用不同的数据访问标准(如果适用) | | 平台 \| 文档 | ✅ 安全矩阵概述了每个用户角色被授权访问的数据 | | 平台 \| 流 | ✅ 尽可能避免在系统上下文中运行屏幕流。如果无法避免,请使用子流元素启动子流,该子流仅包含需要超出运行用户权限的操作,而不是将整个屏幕流设置为在系统上下文中运行 | | 平台 \| 流 | ✅ 指定在系统上下文中运行的流将存储哪些字段 始终指定在使用在系统上下文中运行的获取记录元素时存储哪些字段 | | 平台 \| 组织 | ✅ 生成式 AI 仅在用户模式下操作,或选择用于系统访问有明确业务理由 | | 平台 \| 组织 | ✅ 由于合规性要求,内部用户的组织范围默认设置 (OWD) 是“公用读取”,或内部用户的 OWD 是“专用” | | 平台 \| 组织 | ✅ 外部用户的 OWD 是专用的 | ### 使用加密模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [数据安全](/docs/architect/zh-cn/well-architected/guide/secure#数据安全) → [加密使用](/docs/architect/zh-cn/well-architected/guide/secure#加密的使用)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| Apex | ✅ 如果业务需求在传输过程中需要更大的数据保护,集成涉及的所有代码都使用加密类方法执行逻辑,以在传输前加密数据或在接收时解密数据 | | 平台 \| 设计标准 | ✅ 传输中和(如果需要)静态数据加密的用例清晰易懂 | | 平台 \| 设计标准 | ✅ 批准的加密协议明确列出 | | 平台 \| 文档 | ✅ 代码文档清楚表明加密的使用位置和使用的协议 | | 平台 \| 组织 | ✅ 如果发现安全风险,需要加强静态数据保护,Hyperforce 或 Salesforce Shield 会提供静态加密 | --- ### 共享和可见性反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [数据安全](/docs/architect/zh-cn/well-architected/guide/secure#数据安全) → [共享和可见](/docs/architect/zh-cn/well-architected/guide/secure#sharing-visibility)性的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | Einstein \| 机器人 | 机器人发起的流在系统上下文中运行机器人发起的流在系统模式下运行。如果您未在设置的发布更新部分中启用在机器人用户上下文中运行流更新,可能会出现这种情况 | | 平台 \| Apex | 带有共享的关键字使用不一致 | | 平台 \| 文档 | 文档不存在或不包含安全矩阵 | | 平台 \| 文档 | 如果存在安全矩阵,则不会概述用户角色的数据访问权限 | | 平台 \| 流 | ⚏ 系统上下文用于向外部用户显示的屏幕流 整个屏幕流使用系统上下文显示外部用户无权通过共享模型访问的数据 | | 平台 \| 流 | 在系统上下文中使用获取记录元素时存储所有字段在配置将在系统上下文中运行的获取记录元素时选择“自动存储所有字段”选项 | | 平台 \| 组织 | ⚏ 内部用户的 OWD 设置为专用,没有业务理由,或者内部用户的 OWD 设置为公用读/写 | | 平台 \| 组织 | 生成式 AI 在系统模式下运行,没有业务理由 | | 平台 \| 组织 | ⚏ 外部用户的 OWD 设置为专用以外的任何内容,没有业务理由 | ### 使用加密反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [数据安全](/docs/architect/zh-cn/well-architected/guide/secure#数据安全) → [加密使用](/docs/architect/zh-cn/well-architected/guide/secure#加密的使用)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------- | | 平台 \| Apex | ⚏ 业务需求要求在传输中加强数据保护,但集成涉及的代码在传输前或接收时执行逻辑而不加密数据,或者临时使用加密类方法 | | 平台 \| 设计标准 | 批准的加密协议不明确或未列出 | | 平台 \| 设计标准 | ⚏ 代码没有文档记录,或者文档记录不清楚在代码中加密的使用位置和方式 | | 平台 \| 组织 | ⚏ 业务需求需要更高的静态数据保护,但未使用 Hyperforce 或 Salesforce Shield | --- # 安全 - 组织安全性 ### 身份验证模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [组织安全](/docs/architect/zh-cn/well-architected/guide/secure#组织安全性) → [身份验证](/docs/architect/zh-cn/well-architected/guide/secure#身份验证)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------- | | 平台 \| Apex | ✅ 执行身份验证的方法使用命名凭据来处理用户名/密码流 | | 平台 \| Apex | ✅ 没有用户名或密码以可读的格式显示在代码中(没有硬编码的值或字符串) | | 平台 \| Apex | ✅ 如果存在自定义登录流,所有相关自定义 Apex 使用适当的`SessionManagement`方法 | | 平台 \| Aura | ✅ 没有用户名或密码以可读的格式显示在代码中(没有硬编码的值或字符串) | | 平台 \| Aura | ✅ 执行身份验证的方法使用命名凭据来处理用户名/密码流 | | 平台 \| 文档 | ✅ 批准的安全角色被明确界定和列出 | | 平台 \| 文档 | ✅ 安全角色和允许的身份验证方案(UI、API)之间的映射存在于安全矩阵中 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 执行身份验证的方法使用命名凭据来处理用户名/密码流 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 没有用户名或密码以可读的格式显示在代码中(没有硬编码的值或字符串) | | 平台 \| 组织 | ✅ API 访问控制阻止用户通过未经授权的连接的应用程序进行身份验证 | | 平台 \| 组织 | ✅ 登录 Salesforce 的用户和实体之间的关系是 1:1(没有共享用户) | | 平台 \| 组织 | ✅ 登录配置符合 Salesforce MFA 检查 | | 平台 \| 组织 | ✅ 如果启用了 SSO,批准的管理员用户具有直接登录访问权限 | | 平台 \| 组织 | ✅ 登录身份验证用于登录历史必须存储 6 个月以上的情况 登录历史记录需要存储 6 个月-10 年的情况 | ### 授权模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [组织安全](/docs/architect/zh-cn/well-architected/guide/secure#组织安全性) → [授权](/docs/architect/zh-cn/well-architected/guide/secure#授权)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Einstein \| 机器人 | ✅ 为每个业务用例配置唯一的机器人用户 在机器人配置的 Einstein 机器人生成器概述部分中,选择的机器人用户仅提供执行机器人旨在实现的业务目的所需的最小访问权限,遵循最小权限原则 | | 平台 \| Apex | ✅ 数据库操作适当地执行字段级和对象级访问权限检查 DML 和数据库 DML 语句声明数据操作的用户或系统模式和/或 DML 和数据库 DML 语句在数据操作之前使用`stripInaccessible`方法 | | 平台 \| Apex | ✅ DB 操作适当地执行字段级和对象级访问权限检查 SOQL 和 SOSL 语句使用`WITH USER_MODE`和`WITH SYSTEM_MODE`关键字 AND/OR `stripInaccessible` 方法筛选查询和子查询结果 | | 平台 \| Apex | ✅ 数据库操作适当地执行字段级和对象级访问权限检查 sObject describe result 方法(例如 `isAccessible`、`isCreateable`、`isUpdateable` 和/或 `isDeletable`)被谨慎使用 | | 平台 \| 设计标准 | ✅ 明确列出授予提升权限的用例,包括:- 修改所有数据权限- 查看所有数据权限 | | 平台 \| 文档 | ✅ 有权访问 Salesforce 的每个用户和系统都映射到安全矩阵中的一个或多个角色 | | 平台 \| 文档 | ✅ 安全矩阵清楚列出元数据权限和分配的用户角色 | | 平台 \| 组织 | ✅ 权限集和权限集组用于控制对元数据的访问 | | 平台 \| 组织 | ✅ 权限集和权限集组与业务功能保持一致 | | 平台 \| 组织 | ✅ 为每个集成配置唯一的仅 API 集成用户 | | 平台 \| 组织 | ✅ 简档仅用于控制登录 IP 范围和登录时间 | | 平台 \| 组织 | ✅ 分配给用户的权限遵循安全矩阵定义 | --- ### 身份验证反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [组织安全](/docs/architect/zh-cn/well-architected/guide/secure#组织安全性) → [身份验证](/docs/architect/zh-cn/well-architected/guide/secure#身份验证)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------ | | 平台 \| Apex | 用户名和密码显示在代码中 | | 平台 \| Apex | 如果存在自定义登录流,没有分配会话级安全性的逻辑 | | 平台 \| Apex | 身份验证是临时处理的 | | 平台 \| Aura | 身份验证是临时处理的 | | 平台 \| Aura | 用户名和密码显示在代码中 | | 平台 \| 业务 | 用户配置和取消配置 SLA 和要求不存在 | | 平台 \| 文档 | ⚠ 不包括安全角色 | | 平台 \| 文档 | 安全矩阵没有明确的安全角色映射和允许的身份验证方案 | | 平台 \| Lightning Web 组件 (LWC) | 身份验证是临时处理的 | | 平台 \| Lightning Web 组件 (LWC) | 用户名和密码显示在代码中 | | 平台 \| 组织 | 未启用 API 访问控制 | | 平台 \| 组织 | 如果用户从防火墙后访问 Salesforce,防火墙会使用硬编码的 IP 地址来保护进出 Salesforce 的通信 | | 平台 \| 组织 | 登录 Salesforce 的用户和实体之间的关系不是 1:1(存在共享用户帐户) | | 平台 \| 组织 | 如果启用了 SSO,则没有批准的管理员用户拥有直接登录访问权限 | | 平台 \| 组织 | 登录配置与 Salesforce MFA 检查不一致 | | 平台 \| 组织 | 原有命名凭据用于对外部系统进行身份验证 使用原有命名凭据指定标注端点的 URL 及其所需的身份验证参数 | ### 授权反模式 了解有关架构良好的[受信](/docs/architect/zh-cn/well-architected/guide/trusted-overview) → [安全](/docs/architect/zh-cn/well-architected/guide/secure) → [组织安全](/docs/architect/zh-cn/well-architected/guide/secure#组织安全性) → [授权](/docs/architect/zh-cn/well-architected/guide/secure#授权)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Einstein \| 机器人 | Einstein 机器人使用基本聊天机器人用户或“通用”机器人用户 在机器人配置的 Einstein 机器人生成器概览部分中,选择的机器人用户是基本聊天机器人用户或“通用”自定义聊天机器人用户,该用户由用于不同业务目的的机器人共享 | | 平台 \| Apex | DML、数据库类方法、SOQL 和 SOSL 在默认系统模式下运行 | | 平台 \| Apex | ⚏ 数据库操作未正确执行访问检查 SOQL 查询仅使用 `WITH SECURITY_ENFORCED` 关键字进行访问限制 | | 平台 \| Apex | 数据库操作未正确执行访问权限检查 DML 或数据库类方法仅使用 sObject 和字段级访问权限的`isAccessible`、`isCreateable`、`isUpdateable`和/或`isDeletable`检查 | | 平台 \| 设计标准 | 授予提升权限的用例没有明确列出,包括:- 修改所有数据权限 - 查看所有数据权限 | | 平台 \| 文档 | 未明确列出元数据权限和分配的角色 | | 平台 \| 文档 | 文档不包含安全矩阵 | | 平台 \| 组织 | 分配给用户的权限不遵循安全矩阵定义 | | 平台 \| 组织 | 简档包含元数据的访问控制 | | 平台 \| 组织 | ⚠ 权限集是临时配置的 | | 平台 \| 组织 | 权限集小组未配置为允许基于业务功能的访问权限 | | 平台 \| 组织 | 仅 API 用户未配置或在多个集成之间共享 | | 平台 \| 组织 | 权限集是冗余的或大量重复的;难以理解清晰的功能逻辑和集之间的差异 | --- # 弹性 - 事件响应 ### 分类模式的能力 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [事件响应](/docs/architect/zh-cn/well-architected/guide/resilient#事件响应) → [分类能力](/docs/architect/zh-cn/well-architected/guide/resilient#分类能力)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | -------------------------------------------------------------- | | 平台 \| 业务 | ✅ 应在事件发生前确定应提醒中小企业或利益相关者支持复杂问题 | | 平台 \| 业务 | ✅ 交付和支持团队之间的交接是上线的一部分 | | 平台 \| 业务 | ✅ 如果咨询,Salesforce 架构师会快速响应,并帮助团队专注于恢复 | | 平台 \| 文档 | ✅ 给定解决方案中使用的系统和设计模式可由支持人员发现和读取 | | 平台 \| 组织 | ✅ 记录和自定义错误消息被合并到整个系统的执行路径中 | ### 监控和警报模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [事件响应](/docs/architect/zh-cn/well-architected/guide/resilient#事件响应) → [监控和警报](/docs/architect/zh-cn/well-architected/guide/resilient#监控和警报)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------- | | 平台 \| 文档 | ✅ 基于直接和间接生成式 AI 反馈度量定义提示调整警报的准入标准 | | 平台 \| 组织 | ✅ 警报仅用于通知用户需要人为干预的场景;其他故障可记录并报告 | | 平台 \| 组织 | ✅ 提醒被发送到能够响应它们的用户 | | 平台 \| 组织 | ✅ 在可能时,在潜在故障前发送警报 | ### 恢复模式的时间 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [事件响应](/docs/architect/zh-cn/well-architected/guide/resilient#事件响应) → [恢复时间](/docs/architect/zh-cn/well-architected/guide/resilient#恢复时间)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------------------- | | 平台 \| 业务 | ✅ 团队知道他们在生产中负责拥有哪些服务 | | 平台 \| 业务 | ✅ 定期练习恢复协议 | | 平台 \| 文档 | ✅ 恢复策略按事件类型和触发器定义和分类 | | 平台 \| 文档 | ✅ 事件响应的退出标准存在于您的 SLO 中,并且是明确的 | | 平台 \| 文档 | ✅ 事件期间提升权限的激活条件和分配逻辑清晰 | | 平台 \| 文档 | ✅ 事件响应权限集和授权明确列出 | | 平台 \| 组织 | ✅ 存在基于会话的事件响应权限集,可以在恢复期间分配给支持人员 | | 平台 \| 组织 | ✅ 设置审计跟踪显示指定的恢复测试人员已在商定的时间登录测试环境,并遵循恢复测试脚本 | | 平台 \| 测试计划 | ✅ 存在用于恢复测试的测试脚本,并且可以重复 | | 平台 \| 测试计划 | ✅ 事件模拟的环境清晰列出 | --- ### 分类反模式的能力 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [事件响应](/docs/architect/zh-cn/well-architected/guide/resilient#事件响应) → [分类能力](/docs/architect/zh-cn/well-architected/guide/resilient#分类能力)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------- | | 平台 \| 业务 | ⚏ 在事件发生之前,不会识别应该提醒的中小企业或利益相关者 | | 平台 \| 业务 | 交付团队和支持团队之间的切换不是发布过程的一部分 | | 平台 \| 业务 | Salesforce 架构师认为事件响应超出他们的工作范围 | | 平台 \| 文档 | ⚠ 给定解决方案中使用的系统和设计模式对支持人员不可用 | | 平台 \| 组织 | 不使用日志记录和自定义错误消息 | ### 监控和提醒反模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [事件响应](/docs/architect/zh-cn/well-architected/guide/resilient#事件响应) → [监控和警报](/docs/architect/zh-cn/well-architected/guide/resilient#监控和警报)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------- | | 平台 \| 文档 | 没有定义触发生成式 AI 应用程序的提示调整警报的条件 | | 平台 \| 组织 | ⚠ 发生任何类型的故障时都会发送警报,而不管是否需要采取后续行动 | | 平台 \| 组织 | 向业务用户提供需要技术解决方案的问题提醒 | | 平台 \| 组织 | ⚠ 警报仅在响应已发生的故障时发送 | ### 恢复反模式的时间 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [事件响应](/docs/architect/zh-cn/well-architected/guide/resilient#事件响应) → [恢复时间](/docs/architect/zh-cn/well-architected/guide/resilient#恢复时间)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------- | | 平台 \| 业务 | 不清楚哪些团队负责生产中的不同服务 | | 平台 \| 业务 | 恢复协议不存在或未定期实践 | | 平台 \| 文档 | 事件响应是临时执行的 | | 平台 \| 文档 | 事件响应的退出标准不存在 | | 平台 \| 文档 | 未分配或临时分配提升的权限 | | 平台 \| 文档 | 事件响应权限集和授权未列出 | | 平台 \| 组织 | 基于会话的权限集不存在,无法进行事件响应,或未授权支持人员使用 | | 平台 \| 组织 | ⚏ 设置审计跟踪显示指定的恢复测试人员未登录测试环境或未遵循恢复测试脚本 | | 平台 \| 测试计划 | ⚏ 没有为事件模拟建立环境 | | 平台 \| 测试计划 | 恢复测试不存在测试脚本 | --- # 弹性 - 应用程序生命周期管理 ### 环境策略模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [应用程序生命周期管理](/docs/architect/zh-cn/well-architected/guide/resilient#应用程序生命周期管理) → [环境策略](/docs/architect/zh-cn/well-architected/guide/resilient#环境策略)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------- | | 平台 \| 组织 | ✅ 给定环境中的元数据独立于您的发布工件 | | 平台 \| 组织 | ✅ 环境不直接对应于发布路径 | | 平台 \| 组织 | ✅ 变更的发布路径取决于变更的类型(高风险、中度风险、低风险) | | 平台 \| 组织 | ✅ 过度拥挤的环境不存在 | | 平台 \| 组织 | ✅ 风险配置更改不会直接在生产中进行 | | 平台 \| 组织 | ✅ 在高峰工作时间不发布 | | 平台 \| 组织 | ✅ 采用源驱动的开发发布模式 | | 平台 \| Sandbox | ✅ 为 Developer 和 Developer Pro Sandbox 启用源跟踪 | ### 发布管理模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [应用程序生命周期管理](/docs/architect/zh-cn/well-architected/guide/resilient#应用程序生命周期管理) → [发布管理](/docs/architect/zh-cn/well-architected/guide/resilient#发布管理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------------- | | 平台 \| 设计标准 | ✅ 版本名称清晰 | | 平台 \| 设计标准 | ✅ 团队可以找到并遵循标记工件、开发项目和具有正确发布名称的其他工作的明确指南 | | 平台 \| 文档 | ✅ 版本名称可搜索和发现 | | 平台 \| 文档 | ✅ 可以按版本名称清晰地显示版本清单 | | 平台 \| KPI | ✅ 为不同的开发阶段定义生成式 AI 应用程序的质量阈值 | | 平台 \| 生产 | ✅ 元数据显示使用稳定发布机制 通过元数据 API 使用`source`格式进行部署 | | 平台 \| 生产 | ✅ 元数据显示使用稳定的发布机制 元数据被组织成解锁的软件包 | | 平台 \| 生产 | ✅ 部署日志显示可用历史记录中没有失败的部署 | | 平台 \| 生产 | ✅ 部署历史记录显示了明确的发布节奏和发布窗口中相当统一的部署集群 | | 平台 \| 生产 | ✅ DevOps Center 已启用并已安装 | | 平台 \| 生产 | ✅ 元数据显示使用稳定的发布机制 更改集不用于发布更改 | | 平台 \| 路线图 | ✅ 功能明确绑定到特定的命名版本 | | 平台 \| 路线图 | ✅ 版本名称清晰 | | 平台 \| 路线图 | ✅ 版本名称可搜索和发现 | ### 测试策略模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [应用程序生命周期管理](/docs/architect/zh-cn/well-architected/guide/resilient#应用程序生命周期管理) → [测试策略](/docs/architect/zh-cn/well-architected/guide/resilient#测试策略)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| Apex | ✅ Apex 测试类包括对 Data Cloud 对象运行的查询的覆盖率 测试类扩展 System.SoqlStubProvider 类并覆盖 handleSoqlQuery() 方法。使用 Test.createStubQueryRow() 或 Test.createStubQueryRows() 创建 DMO 实例。 | | 平台 \| Apex | ✅ 数据工厂模式用于单元测试 | | 平台 \| Apex | ✅ 模拟/小作品用于模拟 API 响应 | | 平台 \| 业务 | ✅ 在拥有 B2C 规模应用程序、大量用户或大量数据时,将规模测试作为 QA 流程的一部分 | | 平台 \| 业务 | ✅ 规模测试有定义明确的标准 | | 平台 \| 业务 | ✅ 您在完全 Sandbox 中进行规模测试 | | 平台 \| 业务 | ✅ 规模测试侧重于系统的高优先级方面 | | 平台 \| 业务 | ✅ 模拟器用于复制类似生产的条件,以实现可扩展性和性能测试 | | 平台 \| 业务 | ✅ 测试会在更改进入源代码控制时自动运行 | | 平台 \| 业务 | ✅ 在应用程序开发周期中,耐久度、压力、性能和规模测试会每隔一段时间运行,并视为持续任务 | | 平台 \| 业务 | ✅ 提示性工程包括人工的质量审核 | | 平台 \| 业务 | ✅ 可用性测试采用各种设备和辅助技术 | | 平台 \| 组织 | ✅ 所有测试数据均会清除敏感和识别数据 | | 平台 \| 测试计划 | ✅ 环境按支持的测试类型分类 | | 平台 \| 测试计划 | ✅ 根据风险、用例或复杂性指定适当的测试制度 | --- ### 环境策略反模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [应用程序生命周期管理](/docs/architect/zh-cn/well-architected/guide/resilient#应用程序生命周期管理) → [环境策略](/docs/architect/zh-cn/well-architected/guide/resilient#环境策略)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------- | | 平台 \| 组织 | 环境直接对应于发布路径 | | 平台 \| 组织 | ⚠ 每个更改的发布路径相同 | | 平台 \| 组织 | 存在过度拥挤的环境 | | 平台 \| 组织 | ⚏ 风险配置更改直接在生产中实施 | | 平台 \| 组织 | 采用基于组织的开发和发布模型 | | 平台 \| 组织 | ⚠ 发布发生在工作高峰时段 | | 平台 \| 组织 | 给定环境中的元数据是您的发布工件 | | 平台 \| Sandbox | 未为 Developer 和 Developer Pro Sandbox 启用源跟踪 | ### 发布管理反模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [应用程序生命周期管理](/docs/architect/zh-cn/well-architected/guide/resilient#应用程序生命周期管理) → [发布管理](/docs/architect/zh-cn/well-architected/guide/resilient#发布管理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ----------------------------------------------------------------------------- | | 平台 \| 设计标准 | ⚠ 版本名称缺失 | | 平台 \| 设计标准 | 团队以不同的方式引用工件、开发项目和其他工作 | | 平台 \| 文档 | ⚏ 版本名称是临时的或不存在 | | 平台 \| 文档 | ⚠ 无法使用版本名称清晰地查看版本清单 | | 平台 \| KPI | 生成式 AI 应用程序的质量阈值未定义,或未在不同开发阶段定义 | | 平台 \| 生产 | 元数据表示使用基于组织的发布机制 通过元数据 API 使用`package.xml`格式进行部署 | | 平台 \| 生产 | 元数据表示使用基于组织的发布机制 积极使用更改集 | | 平台 \| 生产 | 部署日志显示可用历史记录中失败部署的重复实例 | | 平台 \| 生产 | ⚏ 部署没有明显的节奏或显示不均衡的部署集群(热修复和临时回滚的迹象) | | 平台 \| 生产 | 未启用并安装 DevOps Center | | 平台 \| 路线图 | ⚏ 功能未明确绑定到特定版本 | | 平台 \| 路线图 | ⚠ 版本名称缺失 | | 平台 \| 路线图 | ⚏ 版本名称是临时的或不存在 | ### 测试策略反模式 了解有关架构良好的可[适应](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [应用程序生命周期管理](/docs/architect/zh-cn/well-architected/guide/resilient#应用程序生命周期管理) → [测试策略](/docs/architect/zh-cn/well-architected/guide/resilient#测试策略)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------------- | | Data 360 \| Apex | Apex 测试方法未涵盖针对 Data Cloud 对象运行的 SOQL 查询的测试覆盖率 | | 平台 \| Apex | 您的单元测试依赖于组织数据 | | 平台 \| Apex | 不使用模拟/小作品 | | 平台 \| 业务 | 规模测试未确定优先级 | | 平台 \| 业务 | 您没有在 QA 流程中执行规模测试,您拥有 B2C 规模的应用程序、大量用户或大量数据 | | 平台 \| 业务 | 规模测试没有定义明确的标准 | | 平台 \| 业务 | 您可以在部分复制或 Developer Sandbox 中执行规模测试 | | 平台 \| 业务 | 不进行可用性测试,或在有限的设备上执行 | | 平台 \| 业务 | 不会测试用户请求、API 流量和网络速度变化的类似生产的数量。 | | 平台 \| 业务 | 测试自动化不到位 | | 平台 \| 业务 | 提示工程缺少人工的质量审核 | | 平台 \| 业务 | 耐力、压力、性能、规模测试被视为一个发展阶段。 | | 平台 \| 组织 | ⚏ 测试数据与生产数据相同 | | 平台 \| 测试计划 | 不清楚哪个环境可以支持什么类型的测试 | | 平台 \| 测试计划 | 测试制度未按风险、用例或复杂性分类 | | 平台 \| 测试计划 | 自定义 LWC 的性能测试是事后的想法 等到开发周期结束时再测试自定义 Lightning 组件 | | 平台 \| 测试计划 | ⚠ ⸏ 使用低于 50% 的预期用户流量测试集成 依靠少数用户的结果来考虑集成测试就足够了 | --- # 弹性 - 连续性计划 ### 构建备份和还原功能模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [连续性规划](/docs/architect/zh-cn/well-architected/guide/resilient#连续性计划) → [构建备份和还原功能](/docs/architect/zh-cn/well-architected/guide/resilient#构建备份和还原功能)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------ | | 平台 \| 公司 | ✅ 测试计划和测试日志显示,每年至少两次在完全或部分复制 Sandbox 中测试数据还原 | | 平台 \| 公司 | ✅ 备份存储在仅授权用户可访问的安全位置 | | 平台 \| 文档 | ✅ 数据和元数据都存在备份和还原策略 | ### 业务连续性模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [连续性规划](/docs/architect/zh-cn/well-architected/guide/resilient#连续性计划) → [业务连续性](/docs/architect/zh-cn/well-architected/guide/resilient#业务连续性)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | 平台 \| 业务 | ✅ 采用“恢复第一”的思想,专注于尽快使最优先的业务功能和容量失去影响 | | 平台 \| 业务 | ✅ 有 BCP 测试计划审核的维护计划 | | 平台 \| 文档 | ✅ BCP 存在,包含:如果 Salesforce 不可用,继续处理或分类数据的步骤,可能触发使用 BCP 的事件列表,BCP 测试的步骤和间隔 | | 平台 \| 文档 | ✅ BCP 包括上游和下游系统和依赖性 | ### 技术连续性模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [连续性规划](/docs/architect/zh-cn/well-architected/guide/resilient#连续性计划) → [技术连续性](/docs/architect/zh-cn/well-architected/guide/resilient#技术连续性)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------ | | 平台 \| 业务 | ✅ 您已评估是否需要构建有意冗余或故障切换系统 | | 平台 \| 业务 | ✅ 事件恢复策略尽可能自动化 | | 平台 \| 文档 | ✅ 您的 BCP 客户需要额外的资源或打破常规的程序团队可能需要有效地响应事件 | | 平台 \| 测试计划 | ✅ BCP 中与流程和人员相关的区域已计入 | --- ### 构建备份和还原功能反模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [连续性规划](/docs/architect/zh-cn/well-architected/guide/resilient#连续性计划) → [构建备份和还原功能](/docs/architect/zh-cn/well-architected/guide/resilient#构建备份和还原功能)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------- | | 平台 \| 公司 | ⚠ 没有数据还原过程或数据还原过程未经测试 | | 平台 \| 公司 | ⚏ 备份不可读 | | 平台 \| 公司 | 备份存储在未经授权的业务用户可以访问的位置 | | 平台 \| 文档 | 备份和还原策略不存在或策略不完整(仅适用于数据或元数据,不适用于两者) | ### 业务连续性反模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [连续性规划](/docs/architect/zh-cn/well-architected/guide/resilient#连续性计划) → [业务连续性](/docs/architect/zh-cn/well-architected/guide/resilient#业务连续性)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------- | | 平台 \| 业务 | ⚠ ⸏ “解决问题”的心态是事件管理的唯一方法 | | 平台 \| 业务 | ⚏ BCP 测试计划不会定期刷新 | | 平台 \| 文档 | 您的 BCP 仅包含 Salesforce | | 平台 \| 文档 | BCP 不存在或不完整 | ### 技术连续性反模式 了解有关架构良好的[适应性](/docs/architect/zh-cn/well-architected/guide/adaptable-overview) → [弹性](/docs/architect/zh-cn/well-architected/guide/resilient) → [连续性规划](/docs/architect/zh-cn/well-architected/guide/resilient#连续性计划) → [技术连续性](/docs/architect/zh-cn/well-architected/guide/resilient#技术连续性)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------ | | 平台 \| 业务 | ⚠ 您尚未评估是否需要有意冗余或故障切换系统 | | 平台 \| 业务 | 事件恢复策略全部是手动操作 | | 平台 \| 文档 | 您的 BCP 不包括运营支持需求 | | 平台 \| 测试计划 | 不考虑 BCP 中与流程和人员相关的区域 | --- # 意图 - 可维护性 ### 标准和自定义功能模式 了解有关构建良好的[易用性](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图](/docs/architect/zh-cn/well-architected/guide/intentional)性 → 可[维护性](/docs/architect/zh-cn/well-architected/guide/intentional#可维护性) → [标准和自定义功能](/docs/architect/zh-cn/well-architected/guide/intentional#standard-vs-custom-functionality)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 组织 | ✅ 尽可能利用标准连接器 如果标准连接器可用,请仔细考虑实施自定义数据流的含义。自定义流将无法利用对标准功能的增强 | | Einstein \| 组织 | ✅ 从现有提示开始,并根据您的需要进行自定义。使用示例提示模板库中的最佳实践,而不是从头开始起草新提示 | | Einstein \| 提示模板 | ✅ 在提示模板中使用 Einstein 搜索检索器时,使用适用于 RAG 的低代码搜索检索器,而不是自定义 Apex | | 平台 \| Apex | ✅ 不存在覆盖标准页面视图机制的代码 | | 平台 \| Aura | ✅ 不存在覆盖标准页面视图机制的代码 | | 平台 \| Aura | ✅ 没有代码尝试覆盖或规避平台执行顺序 | | 平台 \| 数据模型 | ✅ 没有对象的名称或功能与标准对象重复 | | 平台 \| 数据模型 | ✅ 标准对象不用于远远超出预期范围的目的 | | 平台 \| 决策记录 | ✅ 决策记录显示选择构建或购买解决方案时的短期和长期成本计算 | | 平台 \| 设计标准 | ✅ 解决方案的指导原则使用以下优先级:1\.使用内置平台服务 2.在构建自定义解决方案之前,请考虑 AppExchange 应用程序 3.在编写代码之前使用低代码自定义 | | 平台 \| 设计标准 | ✅ 有明确的指导原则,避免不必要的自定义解决方案 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 不存在覆盖标准页面视图机制的代码 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 没有代码尝试覆盖或规避平台执行顺序 | | 平台 \| Visualforce | ✅ 没有代码尝试覆盖或规避平台执行顺序 | ### 技术性债务模式 了解更多关于架构良好的[问题](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → 可[维护性](/docs/architect/zh-cn/well-architected/guide/intentional#可维护性) → [技术债务](/docs/architect/zh-cn/well-architected/guide/intentional#技术债务) | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 平台 \| 决策记录 | ✅ 技术前/技术后债务补救的 KPI 有清晰的记录 | | 平台 \| 决策记录 | ✅ 关于作为和不作为的权衡讨论侧重于业务成本或收益 | | 平台 \| 组织 | ✅ 没有不受支持或传统技术处于活动状态的 Salesforce 组织连接使用适用于 Salesforce Connect 的跨组织适配器 | | 平台 \| 组织 | ✅ 没有不支持的或传统技术处于活动状态包括: - 所有用户使用 Lightning Experience - Apex 中没有或很少使用`@future`(使用 Queueable) - 所有第三方 Apex 属于 AppExchange 软件包 - 没有有效的工作流规则(使用流) - 没有有效的进程构建器进程(使用流) - PushTopic 事件(使用变更数据捕获) - 通用事件(使用平台事件) - 30.0 之前的 API 版本 - Salesforce 组织连接使用适用于 Salesforce Connect 的跨组织适配器 | | 平台 \| 组织 | ✅ 没有不受支持或传统技术处于活动状态 没有或很少使用 Apex 中的`@future`(使用队列) | | 平台 \| 组织 | ✅ 没有不支持或传统技术处于活动状态 所有第三方 Apex 属于 AppExchange 软件包 | | 平台 \| 组织 | ✅ 没有不支持或传统技术处于活动状态 所有用户都在 Lightning Experience 中工作 | | 平台 \| 组织 | ✅ 没有不支持或传统技术处于活动状态 没有有效的工作流规则(使用流) | | 平台 \| 组织 | ✅ 没有不支持或传统技术处于活动状态 没有活动进程构建器进程(使用流) | | 平台 \| 组织 | ✅ 没有不支持或原有技术处于活动状态的 PushTopic 事件(使用变更数据捕获) | | 平台 \| 组织 | ✅ 在 30.0 之前,没有不支持或原有技术的有效 API 版本 | | 平台 \| 组织 | ✅ 没有不支持或原有技术处于活动状态的通用事件(使用平台事件) | | 平台 \| 路线图 | ✅ 交付件和开始/结束日期清晰 | | 平台 \| 路线图 | ✅ 解决技术债务问题的工作存在 | --- ### 标准和自定义功能反模式 了解有关构建良好的[易用性](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图](/docs/architect/zh-cn/well-architected/guide/intentional)性 → 可[维护性](/docs/architect/zh-cn/well-architected/guide/intentional#可维护性) → [标准和自定义功能](/docs/architect/zh-cn/well-architected/guide/intentional#standard-vs-custom-functionality)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------------------ | | Data 360 \| 组织 | ⚠ 不经常使用标准连接器 通过批量或流接收实施自定义数据流,当标准连接器 | | Einstein \| 提示模板 | 提示模板从头开始创建 提示模板从头开始创建,具有不同的样式、措辞和格式 | | Einstein \| 提示模板 | 提示模板利用自定义 Apex for RAG 在提示模板中使用自定义 Apex 资源实施 RAG | | 平台 \| Apex | 代码尝试覆盖或规避平台执行顺序 | | 平台 \| Aura | 代码的存在是为了覆盖标准页面视图机制,通常以单页面应用程序的形式存在 | | 平台 \| Aura | 代码尝试覆盖或规避平台执行顺序 | | 平台 \| 数据模型 | 对象与标准对象的名称和/或功能重复 | | 平台 \| 数据模型 | 标准对象用于远远超出预期范围的目的 | | 平台 \| 决策记录 | 在选择构建或购买解决方案时,决策记录不考虑短期和长期成本 | | 平台 \| 设计标准 | 设计标准要么不存在,要么没有明确的理由来避免不必要的自定义和代码 | | 平台 \| Lightning Web 组件 (LWC) | 代码的存在是为了覆盖标准页面视图机制,通常以单页面应用程序的形式存在 | | 平台 \| Lightning Web 组件 (LWC) | 代码尝试覆盖或规避平台执行顺序 | | 平台 \| Visualforce | 代码的存在是为了覆盖标准页面视图机制,通常以单页面应用程序的形式存在 | ### 技术性债务反模式 了解更多关于架构良好的[问题](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → 可[维护性](/docs/architect/zh-cn/well-architected/guide/intentional#可维护性) → [技术债务](/docs/architect/zh-cn/well-architected/guide/intentional#技术债务) | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 平台 \| 决策记录 | 技术债务补救没有可衡量的 KPI | | 平台 \| 决策记录 | ⚏ 技术债务从技术或 IT 角度考虑,与业务无关 | | 平台 \| 组织 | 不支持或原有技术是 30.0 之前的有效 API 版本 | | 平台 \| 组织 | 不支持或原有技术已启用工作流规则 | | 平台 \| 组织 | 不支持或原有技术已启用 PushTopic 事件 | | 平台 \| 组织 | 不支持或原有技术已启用进程构建器进程 | | 平台 \| 组织 | 不支持或原有技术已启用通用事件 | | 平台 \| 组织 | 不支持或原有技术已启用 Salesforce Classic 中的用户 | | 平台 \| 组织 | 不支持或原有技术已启用 Salesforce 至 Salesforce 连接 | | 平台 \| 组织 | 不支持或传统技术处于活动状态包括:- 使用 Salesforce Classic 的用户- Apex 中的`@future`使用情况- 来自非 AppExchange 源的第三方 Apex- 工作流规则- 进程构建器进程- PushTopic 事件- 通用事件- 30.0 之前的 API 版本- Salesforce 到 Salesforce 的连接 | | 平台 \| 组织 | 不支持或传统技术是 Apex 中活跃的`@future`使用 | | 平台 \| 组织 | 不支持或原有技术已启用来自非 AppExchange 源的第三方 Apex | | 平台 \| 路线图 | ⚠ 没有计划解决技术债务问题的工作 | | 平台 \| 路线图 | 交付内容不明确;开始/结束日期不明确 | --- # 意图 - 可读性 ### 设计标准模式 了解有关结构良好的[易用性](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图性](/docs/architect/zh-cn/well-architected/guide/intentional) → [可读性](/docs/architect/zh-cn/well-architected/guide/intentional#可读性) → [设计标准](/docs/architect/zh-cn/well-architected/guide/intentional#设计标准)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Einstein \| 客服人员 | ✅ 客服人员的语言设置与贵公司的语气相匹配 如果贵公司的语气是正式的,例如金融机构,客服人员的语气设置为“正式”。如果您的公司是非正式的,则语气设置为“随意”。否则,您的语气设置为“中性” | | Einstein \| 组织 | ✅ 提示模板利用格式化为 LLM 提供上下文 单个哈希用于将短文本块标记为提示模板上下文的单个单元 | | Einstein \| 组织 | ✅ 提示模板使用一致的写作风格 您的单词选择、格式、表情符号和标点符号在模板之间保持一致 | | Einstein \| 组织 | ✅ 提示模板简洁,易于理解和使用自然语言。模板避免使用行业术语或技术术语 | | Einstein \| 组织 | ✅ 提示模板清楚表示上下文和说明。在提示中提供上下文后,以文本“指令”开始新行,然后是三引号 ("") 括起来的指令 | | 平台 \| 业务 | ✅ 批准的 AI 模型被明确识别,并包含预期目的 | | 平台 \| 业务 | ✅ 批准的设计模式易于按用例查找和识别 | | 平台 \| 业务 | ✅ 团队知道使用(和不使用)什么工具完成工作 | | 平台 \| 组织 | ✅ 代码和声明性自定义具有一致的、人类可读的名称 | | 平台 \| 组织 | ✅ 数据模型的对象和字段名称一致、统一 | | 平台 \| 组织 | ✅ 审核显示字段在报表等中一致填写和引用。 | ### 文档模式 了解有关结构良好的[易用性](/docs/architect/zh-cn/well-architected/guide/easy-overview)的更多信息 → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → [可读性](/docs/architect/zh-cn/well-architected/guide/intentional#可读性) → [文档](/docs/architect/zh-cn/well-architected/guide/intentional#文档) | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 文档 | ✅ 源系统在数据字典中清点 Data 360 数据源在解决方案设计过程中使用包含源和目标系统以及两者之间字段映射的数据字典进行记录 | | 平台 \| 业务 | ✅ 所有解决方案都有业务功能和技术实施详细信息的图表 | | 平台 \| 业务 | ✅ 为代码和声明性自定义设置关键人员/时间/信息日志 | | 平台 \| 业务 | ✅ 人员可以搜索和查找相关文档 | | 平台 \| 组织 | ✅ 代码和声明性自定义有清晰的描述 | --- ### 设计标准反模式 了解有关结构良好的[易用性](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图性](/docs/architect/zh-cn/well-architected/guide/intentional) → [可读性](/docs/architect/zh-cn/well-architected/guide/intentional#可读性) → [设计标准](/docs/architect/zh-cn/well-architected/guide/intentional#设计标准)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | -------------------------------------------------------------------------------------- | | Einstein \| 提示模板 | 提示模板使用行话和/或技术术语 提示模板包括行话、缩写词和技术术语,而不是简洁的自然语言 | | 平台 \| 业务 | 批准的 AI 模型不明确,预期目的不明确 | | 平台 \| 业务 | 团队使用许多不同的工具完成类似的工作 | | 平台 \| 业务 | ⚠ 没有批准的设计模式 | | 平台 \| 业务 | ⚠ 供应商或新员工入职需要大量时间 | | 平台 \| 组织 | ⚏ 代码和声明性自定义名称不一致 | | 平台 \| 组织 | 数据模型的名称不一致,许多对象和字段似乎多余 | | 平台 \| 组织 | 审计显示许多未使用的字段或各种使用情况级别,并且没有与报告等一致的链接。 | ### 文档反模式 了解有关结构良好的[易用性](/docs/architect/zh-cn/well-architected/guide/easy-overview)的更多信息 → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → [可读性](/docs/architect/zh-cn/well-architected/guide/intentional#可读性) → [文档](/docs/architect/zh-cn/well-architected/guide/intentional#文档) | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | --------------------------------------------------------------------------------------------------------------- | | Data 360 \| 组织 | ⚏ 源到目标的映射仅在数据映射画布中记录 数据源字段在 Data 360 的数据映射画布中配置期间动态映射到数据模型对象字段 | | 平台 \| 业务 | 解决方案的内容/方式/原因很难找到,并且可能对大多数团队不可用 | | 平台 \| 业务 | 人们很难理解解决方案和他们正在使用的系统 | | 平台 \| 业务 | ⚠ 供应商或新员工入职需要大量时间 | | 平台 \| 组织 | ⚏ 代码和声明性自定义没有描述,有难以理解的描述,或者有似乎与自定义的实际功能不匹配的描述 | --- # 意图 - 策略 ### 治理模式 了解有关架构良好的[简单性](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → [策略](/docs/architect/zh-cn/well-architected/guide/intentional#策略) → [治理](/docs/architect/zh-cn/well-architected/guide/intentional#治理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------- | | 平台 \| 业务 | ✅ 团队成员知道谁在整个应用程序生命周期中负责什么 | | 平台 \| 业务 | ✅ 团队和项目仅使用为业务批准的 AI 模型 | | 平台 \| 业务 | ✅ 热修复程序具有清晰的生产路径 | | 平台 \| 业务 | ✅ 用户可以轻松报告错误并请求功能 | | 平台 \| 业务 | ✅ 工作项目的优先级过程有据可查,对所有利益相关者透明 | | 平台 \| 业务 | ✅ 环境策略文档清晰,开发环境与文档匹配 | | 平台 \| 业务 | ✅ 生产支持流程清晰 | | 平台 \| 业务 | ✅ 发布计划可以预测,对所有交付团队成员透明 | | 平台 \| 业务 | ✅ 用户和交付/维护团队清楚了解版本 | ### 优先级模式 了解有关构建良好的[难易程度](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → [策略](/docs/architect/zh-cn/well-architected/guide/intentional#策略) → [优先级](/docs/architect/zh-cn/well-architected/guide/intentional#优先级)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------- | | 平台 \| 公司 | ✅ 已确定所有 KPI 的实施和维护费用 | | 平台 \| 公司 | ✅ 根据业务影响、需要交付的新工作量和维护的工作量确定功能请求的优先级 | | 平台 \| 文档 | ✅ 路线图显示自动化基于业务价值确定优先级 | | 平台 \| 文档 | ✅ 所有新工作项目都有明确的业务价值度量(例如,收入增加、流程优化的成本节约等) | ### 路线图模式 了解有关构建良好的[简单](/docs/architect/zh-cn/well-architected/guide/easy-overview)性 → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → [策略](/docs/architect/zh-cn/well-architected/guide/intentional#策略) → [路线图](/docs/architect/zh-cn/well-architected/guide/intentional#路线图)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | --------------------------------------------- | | 平台 \| 业务 | ✅ 交付团队知道如何根据长期优先级评估待办事项 | | 平台 \| 业务 | ✅ 团队知道谁在做什么以及如何管理依赖性 | | 平台 \| 业务 | 利益相关者了解工作项目的“原因” | | 平台 \| 业务 | ✅ 工作是有意为之的,即使优先级需要快速更改 | | 平台 \| 路线图 | ✅ 显示先决条件和依赖性 | | 平台 \| 路线图 | ✅ 传达专为受众定制的信息(业务或技术) | | 平台 \| 路线图 | ✅ 以正确的详细程度传达信息 | | 平台 \| 路线图 | ✅ 显示开始和结束日期 | --- ### 治理反模式 了解有关架构良好的[简单性](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → [策略](/docs/architect/zh-cn/well-architected/guide/intentional#策略) → [治理](/docs/architect/zh-cn/well-architected/guide/intentional#治理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ---------------------------------------------------------------------------------------- | | 平台 \| 业务 | 团队不知道谁负责什么 | | 平台 \| 业务 | 团队会临时选择 AI 模型 | | 平台 \| 业务 | 工作项目没有明确的优先级 | | 平台 \| 业务 | ⚏ 环境是临时配置的,可能不会以可预测的方式刷新;开发人员通常没有他们需要的环境和访问权限 | | 平台 \| 业务 | 文档不容易访问 | | 平台 \| 业务 | ⚠ 您的待办事项已成为过时和停滞的“意见库” | | 平台 \| 业务 | ⚏ 交付团队和用户无法预测发布 | | 平台 \| 业务 | 治理机构充当帮助台,对支持请求进行故障排除 | | 平台 \| 业务 | ⚏ 热修复是临时解决的 | | 平台 \| 业务 | ⚏ 错误报表和功能请求是临时的 | ### 优先级反模式 了解有关构建良好的[难易程度](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → [策略](/docs/architect/zh-cn/well-architected/guide/intentional#策略) → [优先级](/docs/architect/zh-cn/well-architected/guide/intentional#优先级)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------ | | 平台 \| 公司 | 实施和维护自动化的相关成本不明确 | | 平台 \| 公司 | ⚠ 请求以临时或先进先出的方式传递 | | 平台 \| 文档 | 路线图不存在 | | 平台 \| 文档 | ⚠ 与工作关联的业务价值不明确或不存在 | ### 路线图反模式 了解有关构建良好的[简单](/docs/architect/zh-cn/well-architected/guide/easy-overview)性 → [意图](/docs/architect/zh-cn/well-architected/guide/intentional) → [策略](/docs/architect/zh-cn/well-architected/guide/intentional#策略) → [路线图](/docs/architect/zh-cn/well-architected/guide/intentional#路线图)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------------------ | | 平台 \| 业务 | 利益相关者通常对正在做的事情感到沮丧和困惑,并且对何时交付新功能感到兴奋 | | 平台 \| 业务 | 工作从待办事项中提取,没有明确的“原因” | | 平台 \| 业务 | 团队难以协调相互依赖的工作,并且经常在不知不觉中重复工作 | | 平台 \| 业务 | 工作往往是反应性的 | | 平台 \| 路线图 | ⚠ 用作项目启动材料,而非交付的工件 | | 平台 \| 路线图 | 不要帮助利益相关者和交付团队保持一致 | | 平台 \| 路线图 | 包含并非针对受众定制的信息(例如,同一路线图中的业务功能和系统) | | 平台 \| 路线图 | 混合详细信息级别(例如,通过在同一路线图中包含系统和组件) | --- # 简单模式和反模式资源管理器 设计清晰、自动化和引人入胜的用户体验。
✅ Easy - 模式
意图 自动 参与
增加复杂性、降低自动化或影响用户体验的做法。
⚠ 容易 - 反模式
意图 自动 参与
# 自动 - 数据完整性 ### 数据处理模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [数据完整性](/docs/architect/zh-cn/well-architected/guide/automated#数据完整性) → [数据处理](/docs/architect/zh-cn/well-architected/guide/automated#数据处理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 数据字典 | ✅ 存在所有数据源和数据湖对象的字段级数据和优先级逻辑 | | Data 360 \| 组织 | ✅ 如果不存在唯一主键,复合键用于构建唯一主键。当数据集中没有唯一字段时,使用公式字段从数据集联接多个字段。 | | Data 360 \| 组织 | ✅ 使用 CRM Connector 的数据流利用两周一次的完全刷新 当使用 CRM Connector 进行增量加载时,每两周启动一次完全刷新。虽然这会增加数据摄取,但它保护元数据(例如公式字段)的数据完整性,元数据不会触发 DML 事务,因此不会包含在增量加载中 | | Data 360 \| 组织 | ✅ 个人 ID 用于将 Data 360 数据映射到其他系统使用个人 ID 将 Data 360 中的个人映射到其他系统。例如,Marketing Cloud 参与订阅者密钥应映射到 Data 360 中的个人 ID | | Data 360 \| 组织 | ✅ 完全限定密钥用于准确解释数据 所有包含密钥值的 DLO 都有一个密钥限定符字段,并且完全限定密钥 (FQK) 在组织中启用,以确保避免在多个数据流协调到一个数据模型对象 (DMO) 时可能发生的冲突 | | Data 360 \| 组织 | ✅ 在匹配规则可用时使用规范化匹配方法 精确规范化匹配转换源数据,以解决尾随空格、格式不一致和特殊字符等常见匹配问题。在可用字段上使用此方法,而不是使用模糊匹配,除非您已配置多个规则集进行测试,并确认整合率不符合业务需求 | | Einstein \| 文档 | ✅ 数据有用性被记录为 AI 项目设计的一部分 贵公司的数据有用性定义被记录下来并投入使用,以改善 AI 响应 | | 平台 \| Apex | ✅ Future Apex 谨慎使用,适用于标注或系统对象 DML | | 平台 \| Apex | ✅ 异步 Apex 调用使用可排队以在事务之间“链接”复杂的 DML | | 平台 \| Apex | ✅ 批量 Apex 专用于大数据量 批量 Apex 最适合处理大量数据。异步 Apex 的限制高于同步 Apex,因此可以完成更多工作。尽可能避免非常小的批处理大小,以避免流控制(队列泛滥)、开销和耗尽每日异步 Apex 限制的后果 | | 平台 \| Apex | ✅ 所有同步 DML 语句或数据库类方法都在触发器执行上下文之前执行 | | 平台 \| Apex | ✅ 批量 API 仅在必须处理大量数据时使用 批量 API 仅在必须处理大量数据时使用本地 SOAP 和 REST API 可用于少量数据处理 | | 平台 \| 数据字典 | ✅ 存在从数据湖对象到数据模型对象的字段映射 | | 平台 \| 流 | ✅ 在用户上下文中启动的所有流将所有系统上下文事务抽象到子流,子流一致放在暂停元素之后,以创建新事务 | | 平台 \| 流 | ✅ 所有记录触发的流都填充了触发顺序值 | | 平台 \| 流 | ✅ 涉及外部系统标注或长时间运行的流程的流使用异步路径 | | 平台 \| 流 | ✅ 使用 Orchestrator 创建相关数据操作的复杂序列(而不是在单片流中调用多个子流) | | 平台 \| 组织 | ✅ 身份解析协调规则遵循数据字典中的优先级逻辑 | ### 错误处理模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [数据完整性](/docs/architect/zh-cn/well-architected/guide/automated#数据完整性) → [错误处理](/docs/architect/zh-cn/well-architected/guide/automated#错误处理)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ------------------------------------------------------------------------------------ | | Einstein \| 组织 | ✅ 提示指定预期输出 包含 LLM 的直接指令,以仅生成预期类型的内容。 | | 平台 \| Apex | ✅ 自定义异常用于创建高级错误消息和逻辑 | | 平台 \| Apex | ✅ 代码将所有 DML、SOQL、标注和其他关键流程步骤封装在`try-catch`块中 | | 平台 \| Apex | ✅ 数据库类方法可以专用于所有数据操作(而不是 DML) | | 平台 \| Apex | ✅ 在异步和批量上下文中,使用数据库类方法,而不是 DML | | 平台 \| Aura | ✅ JavaScript 将所有数据操作和关键流程步骤封装在`try-catch`块中 | | 平台 \| Aura | ✅ 在`try-catch`块中,本地 JavaScript `Error` 用于 throw 语句(不使用 `$A.error()`) | | 平台 \| Aura | ✅ 所有可恢复的错误逻辑都出现在 `catch` 语句中,并提供明确的用户消息 | | 平台 \| 流 | ✅ 具有数据操作、标注和其他关键处理逻辑的流具有所有关键操作的错误路径 | | 平台 \| 流 | ✅ 屏幕流始终使用错误连接器向用户显示错误 | | 平台 \| 流 | ✅ 为屏幕上显示的错误配置自定义错误消息 | | 平台 \| Lightning Web 组件 (LWC) | ✅ JavaScript 将所有数据操作和关键流程步骤封装在 `if ()`/`else if ()` 块中 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 所有`@wire`函数使用 API 提供的`data`和`error`属性 | | 平台 \| Lightning Web 组件 (LWC) | ✅ 所有 `if (error)`/`else if (error)` 语句都包含处理错误和提供信息性消息的逻辑 | --- ### 数据处理反模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [数据完整性](/docs/architect/zh-cn/well-architected/guide/automated#数据完整性) → [数据处理](/docs/architect/zh-cn/well-architected/guide/automated#数据处理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 组织 | 支持使用模糊匹配的规范化匹配方法的字段 模糊匹配应用于提供精确规范化匹配方法的字段 | | Data 360 \| 组织 | 统一个人 ID 被假定为不可变 统一个人 ID 用作组织其余部分使用的主 ID 或全局 ID | | Data 360 \| 组织 | 事件日期映射到可变日期时间值事件日期映射到可变日期时间字段,例如 LastUpdated 或 LastExtracted | | Data 360 \| 组织 | 主键映射到非唯一的字段如果数据集中没有主键,则选择任何字段作为数据流的主键,而不首先验证选定字段是否唯一 | | Data 360 \| 组织 | 批量加载数据,然后尝试实时激活。例如,常见但有缺陷的方法可能涉及每小时从 Amazon S3 存储桶加载数据,然后通过数据操作激活它 | | 平台 \| Apex | DML 语句定期出现在将在触发器上下文后调用的代码中 | | 平台 \| Apex | 批处理 Apex 作业的范围非常小 使用非常小的批处理大小(例如范围大小 = 1) | | 平台 \| Apex | 批处理 Apex 用于外部标注 使用批处理 Apex 将大量 Salesforce 数据从 Salesforce 推送到外部系统 | | 平台 \| Apex | 无论发布订单要求或记录锁定风险如何,都会使用临时的立即发布(实时)事件,而不是提交后发布(非实时)。 | | 平台 \| Apex | 异步 Apex 功能被任意使用 未来方法和可排队 Apex 被不一致或交替使用 | | 平台 \| Apex | 异步 Apex 功能被任意使用;不清楚开发人员何时使用未来 Apex 与可排队 Apex,何时将 DML 移交给批处理作业 | | 平台 \| Apex | 异步 Apex 很少使用 | | 平台 \| Apex | 异步 Apex 功能被任意使用 数据库操作没有明确一致的逻辑来在需要时将执行传递给批处理 Apex | | 平台 \| 数据字典 | 不包括从数据湖对象到数据模型对象的字段映射 | | 平台 \| 数据字典 | 不包括数据源和数据湖对象的字段级数据和优先级逻辑 | | 平台 \| 流 | 使用屏幕组件的输出的集合执行 DML 当集合是屏幕组件的输出时,利用创建、更新或删除元素上的“使用记录或记录集合中的 ID 和所有字段值”设置 | | 平台 \| 流 | 记录触发的流根本不使用触发顺序属性,或者没有一致使用触发顺序值 | | 平台 \| 流 | 异步路径的使用不一致或根本不一致 | | 平台 \| 流 | 大型单片流尝试协调相关数据操作的复杂序列(带或不带子流) | | 平台 \| 组织 | 身份解析协调规则不遵循数据字典中的优先级逻辑 | ### 错误处理反模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [数据完整性](/docs/architect/zh-cn/well-architected/guide/automated#数据完整性) → [错误处理](/docs/architect/zh-cn/well-architected/guide/automated#错误处理)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------- | | 平台 \| Apex | DML、SOQL、标注或其他关键流程步骤没有一致地封装在 Try-Catch 块中 | | 平台 \| Apex | 不使用数据库类方法 | | 平台 \| Apex | ⚏ 数据操作仅通过 DML 完成 | | 平台 \| Apex | `System.debug` 语句出现在生产代码中(不会被注释掉) | | 平台 \| Aura | JavaScript 没有一致地将数据操作和关键流程步骤封装在`try-catch`块中 | | 平台 \| Aura | 组件使用 `$A.error()` | | 平台 \| Aura | 可恢复的错误逻辑并不总是出现在 `catch` 语句中,并且对用户的错误消息不清楚 | | 平台 \| 流 | ⚏ 流不会一致或根本不使用错误路径 | | 平台 \| 流 | 不使用自定义错误消息,因此用户会看到默认的“此流中发生未处理的错误”消息 | | 平台 \| Lightning Web 组件 (LWC) | `@wire` 函数不使用 API 提供的`data`和`error`属性(或没有一致使用) | | 平台 \| Lightning Web 组件 (LWC) | `if (error)`/`else if (error)` 语句如果使用,实际上不包含处理错误和提供有用错误消息的逻辑 | | 平台 \| Lightning Web 组件 (LWC) | JavaScript 没有一致使用带有数据操作或关键流程步骤的 `if ()`/`else if ()` 块 | --- # 自动化 - 效率 ### KPI 模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [效率](/docs/architect/zh-cn/well-architected/guide/automated#效率) → [KPI](/docs/architect/zh-cn/well-architected/guide/automated#kpi) 的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------- | | Einstein \| 业务 | ✅ 在启用生成 AI 功能之前,确定特定用例的 KPI;在启用生成 AI 功能之前,确定特定用例的 KPI | | 平台 \| 仪表板 | ✅ 与 KPI 相关的所有度量都包含在至少一个仪表板中 | | 平台 \| 文档 | ✅ 每个自动化的输出都是可测量和有时限的 | | 平台 \| 文档 | ✅ 为每个 KPI 列出负责任的利益相关者 | ### 操作逻辑模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview)性 → [自动化](/docs/architect/zh-cn/well-architected/guide/automated) → [效率](/docs/architect/zh-cn/well-architected/guide/automated#效率) → [操作逻辑](/docs/architect/zh-cn/well-architected/guide/automated#操作逻辑)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 业务 | ✅ 在实施数据联合之前评估细分刷新需求 在从外部来源联合数据之前,请确保从 Data 360 到 Marketing Cloud Engagement 的细分刷新和激活的标准 12 小时或 24 小时计划满足业务需求。当您使用 Bring Your Own Lake (BYOL) 数据联合时,目前不支持快速细分和激活 | | Data 360 \| 文档 | ✅ 设计 Marketing Cloud 和 Data 360 之间的 1:1 或 1:多个连接 多个 CRM 实例可以连接到多个 Data 360 实例,但多个 Marketing Cloud 实例不能连接到同一个 Data 360 实例。但是,单个 Marketing Cloud 实例可以连接到不同的 Data 360 实例 | | Data 360 \| 组织 | ✅ 优化细分计划 仅在需要细分的持续时间内设置发布计划。临时或一次性市场活动应使用“不刷新”发布时间表。Evergreen(也称为“始终开启”)市场活动应使用每 12 小时的发布计划。对于 Evergreen 市场活动,仅在市场活动处于活动状态的将来设置结束日期 | | Data 360 \| 组织 | ✅ 优化计算见解计划 如果您的计算见解仅需要运行一次,请使用“未计划”选项,并仅手动发布一次。如果需要的频率低于每 24 小时,请考虑其他自动化选项,例如流 | | Data 360 \| 组织 | ✅ 使用数据操作创建平台事件,以改善操作逻辑 使用数据操作发布平台事件意味着您可以将来自 Data 360(发布事件)的数据操作与需要在贵组织中发生的操作(调用流和 Apex 触发器)分离。这增加了贵组织可以从 Data 360 做出反应的操作规模,并增强了对操作逻辑的控制。 | | Einstein \| 客服人员 | ✅ 将客服人员指令定义为迭代构建/测试过程的一部分 构建所需的客服人员主题字段(名称、描述、范围)并添加关联操作,然后开始测试主题。增量添加指令,以指导客服人员在迭代构建/测试循环中以所需方式执行主题并选择操作 | | Einstein \| 组织 | ✅ 提示模板指定角色和角色的目标 提示模板包含上下文信息,例如 LLM 应该假设的角色,以及该角色的目标。例如,包含诸如“您是市场营销主管,想要邀请主要客户参加实时活动”之类的语言。 | | Einstein \| 搜索索引 | ✅ 在为结构化 DMO 创建搜索索引时忽略低熵字段 为了提高相关性,请考虑排除基数非常低(列表中不同元素的数量)或低熵(列表条目集中在几个值周围)的数据点。一般来说,这些字段对于通过向量搜索定位相关数据几乎没有提供有用的信息,或者根本没有提供任何有用的信息 | | 平台 \| Apex | ✅ SOQL 语句是选择性的 比较运算符在 SOQL 语句中使用正逻辑(例如 `INCLUDES`、`IN`)作为主要或唯一逻辑 | | 平台 \| Apex | ✅ SOQL 语句是选择性的 在 SOQL 语句中使用 `= NULL`,`!= NULL` 很少,并且/或者总是跟在正比较运算符之后 | | 平台 \| Apex | ✅ SOQL 语句是选择性的 SOQL 中没有显示 `LIMIT 1` 语句 | | 平台 \| Apex | ✅ SOQL 语句是选择性的 SOQL 语句中不使用 `ALL ROWS` 关键字 | | 平台 \| Apex | ✅ 循环中未显示 SOQL | | 平台 \| Apex | ✅ 所有通配符条件都显示在 SOSL 中 | | 平台 \| Apex | ✅ SOQL 语句具有选择性 没有 SOQL 语句使用`LIKE`比较或部分文本比较 | | 平台 \| Apex | ✅ SOQL 包装在 `try-catch` 中 | | 平台 \| Apex | ✅ 没有变量引用硬编码值(适用于记录类型、用户等)。 | | 平台 \| 设计标准 | ✅ 自动化中同步和异步操作的用例被清楚地概述为设计标准的一部分 | | 平台 \| 文档 | ✅ 清晰概述自动化的计划和潜在执行路径 | | 平台 \| 流 | ✅ 没有变量引用硬编码值(适用于记录类型、用户等) | | 平台 \| 流 | ✅ 在大数据量上下文中,流(包括进程)将逻辑切换到 Apex | | 平台 \| 流 | ✅ 子流用于需要在整个业务中重用的流程部分 | | 平台 \| 流 | ✅ 所有自动启动的流和进程都使用决策和/或暂停元素来评估准入条件,并防止对大量数据执行无限循环或执行 | ### 流程设计模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [效率](/docs/architect/zh-cn/well-architected/guide/automated#效率) → [流程设计](/docs/architect/zh-cn/well-architected/guide/automated#流程设计)的更多信息 | Where to look?
产品区域 \| 位置 | 好是什么样子?
模式 | | ---------------------------------- | -------------------------------------------------------------------------------------------- | | Data 360 \| 组织 | ✅ 优化数据转换内部批量转换中处理的总行数,使用画布上的筛选器活动,仅隔离成功转换所需的行数 | | Data 360 \| 组织 | ✅ 合并计算见解中的维度 尽可能将两个维度合并为一个计算见解,而不是编写每个维度的多个计算见解 | | 平台 \| Apex | ✅ 每个类都服务于一个特定的目的 | | 平台 \| Apex | ✅ 每种方法执行特定的精细任务 | | 平台 \| Apex | ✅ 所有输入变量在类中都有明确的目的 | | 平台 \| Apex | ✅ 代码执行需要最少的资源 | | 平台 \| 流 | ✅ 仅在现有系统数据无法使用时要求用户提供数据 | | 平台 \| 流 | ✅ 流以层次结构组织,包括主流和支持子流 | | 平台 \| 流 | ✅ 所有用户输入在流中都有明确的目的 | | 平台 \| 流 | ✅ 每个流服务于一个特定目的 | | 平台 \| 流 | ✅ 每个步骤执行特定的精细任务 | --- ### KPI 反模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [效率](/docs/architect/zh-cn/well-architected/guide/automated#效率) → [KPI](/docs/architect/zh-cn/well-architected/guide/automated#kpi) 的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------- | | 平台 \| 仪表板 | ⚏ KPI 报告不存在或仪表板缺少与一些 KPI 相关的度量 | | 平台 \| 文档 | 没有负责任的利益相关者, KPI 就会存在 | | 平台 \| 文档 | 自动化不存在 KPI,或者测量的时间范围不明确 | ### 操作逻辑反模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview)性 → [自动化](/docs/architect/zh-cn/well-architected/guide/automated) → [效率](/docs/architect/zh-cn/well-architected/guide/automated#效率) → [操作逻辑](/docs/architect/zh-cn/well-architected/guide/automated#操作逻辑)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | Data 360 \| 文档 | 设计 Marketing 和 Data 360 之间的多对一连接图表或解决方案设计文档指定了多个 Marketing Cloud 实例,通过 Marketing Cloud 连接器连接到单个 Data 360 实例 | | Data 360 \| 组织 | ⚏ 在不评估细分刷新需求的情况下实施数据联合 数据联合用于需要快速细分和激活的数据集(发送激活数据的 1 小时或 4 小时计划),而不是标准的 12 小时或 24 小时计划 | | Data 360 \| 组织 | ⚏ 实施数据联合时不评估数据转换需求 外部 DLO 包含流数据转换所需的数据 | | Einstein \| 客服人员 | 在设计过程开始时定义客服人员指令在测试客服人员执行主题和选择适当操作的能力之前添加指令 | | 平台 \| Apex | SOQL 语句是非选择性的比较使用 `NOT`、`NOT IN` 条件作为 SOQL 语句中的主要或唯一比较运算符 | | 平台 \| Apex | SOQL 语句是非选择性`ALL ROWS`关键字用于 SOQL 语句 | | 平台 \| Apex | SOQL 语句是非选择性`= NULL`,`!= NULL`条件用作 SOQL 语句中的主要或唯一比较运算符 | | 平台 \| Apex | 变量包含硬编码值 | | 平台 \| Apex | ⚏ SOQL 显示在循环中 | | 平台 \| Apex | SOQL 语句是非选择性`LIKE`,通配符筛选条件经常出现在 SOQL 语句的 SOQL 语句中 | | 平台 \| Apex | ⚏ SOQL 未封装在 `try-catch` 中 | | 平台 \| Apex | SOQL 语句是 SOQL 中出现的非选择性`LIMIT 1`语句 | | 平台 \| Apex | ⚏ SOSL 很少或没有一致地用于通配符选择条件 | | 平台 \| 设计标准 | 未解决同步和异步操作的用例 | | 平台 \| 文档 | 自动化调用未记录 | | 平台 \| 流 | 变量包含硬编码值 | | 平台 \| 流 | ⚏ 流(包括进程)必须在批量数据加载之前手动停用 | | 平台 \| 流 | 流的一部分在流之间重复,而不是使用子流 | | 平台 \| 流 | 流(包括进程)触发“未处理异常”通知 | | 平台 \| 流 | ⚠ 即使简单的流也会定期导致与调控器限制相关的错误 | ### 流程设计反模式 了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [效率](/docs/architect/zh-cn/well-architected/guide/automated#效率) → [流程设计](/docs/architect/zh-cn/well-architected/guide/automated#流程设计)的更多信息 | Where to look?
产品区域 \| 位置 | 要避免什么?
反模式 | | ---------------------------------- | ------------------------------------------------------------ | | 平台 \| Apex | 类具有多种用途 | | 平台 \| Apex | 方法执行多个任务,或方法执行的任务与其所属类的声明目的不一致 | | 平台 \| Apex | 输入变量未在方法中实际使用 | | 平台 \| Apex | 方法从数据库或外部系统检索不必要的数据 | | 平台 \| 流 | ⚏ 流需要额外的输入来提供上下文 | | 平台 \| 流 | ⚠ 流服务于多种目的 | | 平台 \| 流 | 相关步骤组包含与其他流中的步骤组重叠的功能 | | 平台 \| 流 | 流会在存储的数据可用于替代时请求用户输入 | | 平台 \| 流 | 流需要不使用数据的输入 | --- # 自适应模式和反模式资源管理器 通过弹性操作和可组合架构构建变革。
✅ 可适应 - 模式
弹性 可合成
降低弹性、限制可组合性或增加更改难度的做法。
⚠ 自适应 - 反模式
弹性 可合成