SOQL-Lib项目:构建高效选择器的六种设计模式
2025-06-19 22:35:08作者:秋阔奎Evelyn
前言
在Salesforce开发中,SOQL查询是数据访问层的核心。SOQL-Lib项目提供了一套优雅的解决方案,帮助开发者构建灵活、可维护的选择器(Selector)模式。本文将深入解析六种不同的选择器实现方式,帮助开发者根据项目需求选择最适合的方案。
选择器模式概述
选择器模式是Salesforce开发中常用的设计模式,它将数据访问逻辑集中管理,提供以下优势:
- 提高代码复用性
- 统一管理字段级安全(FLS)
- 集中控制共享规则
- 简化复杂查询构建
方案A:继承+接口+静态方法(推荐)
这是最灵活的推荐方案,结合了继承和接口的优势:
public inherited sharing class SOQL_Account extends SOQL implements SOQL.Selector {
public static SOQL_Account query() {
return new SOQL_Account();
}
private SOQL_Account() {
super(Account.SObjectType);
// 默认配置
with(Account.Id, Account.Name, Account.Type)
.systemMode()
.withoutSharing();
}
public SOQL_Account byIndustry(String industry) {
with(Account.Industry)
.whereAre(Filter.with(Account.Industry).equal(industry));
return this;
}
}
特点:
- 使用私有构造函数确保通过静态方法创建实例
- 默认配置集中管理
- 方法链式调用提供流畅接口
- 业务逻辑中可灵活扩展查询条件
使用示例:
List<Account> accounts = SOQL_Account.query()
.byIndustry('IT')
.with(Account.BillingCity)
.toList();
方案B:组合+接口+静态方法
这种方案采用组合而非继承,通过静态方法提供查询入口:
public inherited sharing class SOQL_Contact implements SOQL.Selector {
public static SOQL query() {
return SOQL.of(Contact.SObjectType)
.with(Contact.Id, Contact.Name)
.systemMode();
}
public static SOQL byAccountId(Id accountId) {
return query().whereAre(Filter.with(Contact.AccountId).equal(accountId));
}
}
适用场景:
- 需要更轻量级的实现
- 不希望使用继承
- 查询逻辑相对简单
方案C:继承+非静态方法
传统面向对象风格,适合熟悉经典OOP的团队:
public inherited sharing class SOQL_Account extends SOQL {
public SOQL_Account() {
super(Account.SObjectType);
with(Account.Id, Account.Name);
}
public SOQL_Account byIndustry(String industry) {
return (SOQL_Account)with(Account.Industry)
.whereAre(Filter.with(Account.Industry).equal(industry));
}
}
特点:
- 实例方法更符合传统OOP思维
- 需要显式类型转换保持链式调用
方案D:组合+接口+非静态方法(多团队适用)
当不同团队需要不同查询配置时,这种方案特别有用:
public inherited sharing virtual class BaseAccountSelector implements SOQL.Selector {
public virtual SOQL query() {
return SOQL.of(Account.SObjectType).with(Account.Id);
}
}
public with sharing class TeamA_AccountSelector extends BaseAccountSelector {
public override SOQL query() {
return super.query().with(Account.AccountNumber).systemMode();
}
}
优势:
- 基础查询可复用
- 各团队可自定义扩展
- 符合开闭原则
方案E:完全自定义
完全自由的设计方式,适合有特殊需求的场景:
public inherited sharing class CustomAccountSelector {
public static SOQL getBasicQuery() {
return SOQL.of(Account.SObjectType).with(Account.Id);
}
}
方案F:FFLib风格
借鉴了流行的FFLib设计模式:
public inherited sharing class SOQL_Opportunity extends SOQL {
public List<Opportunity> byAccountId(Id accountId) {
return with(Opportunity.AccountId)
.whereAre(Filter.with(Opportunity.AccountId).equal(accountId))
.toList();
}
}
最佳实践建议
- 安全性:始终考虑
inherited sharing或显式共享模式 - 默认字段:在构造函数中设置最常用的字段
- 方法设计:保持方法单一职责,便于组合
- 性能:避免在循环中构建查询
- 可测试性:设计可mock的接口
总结
SOQL-Lib提供了多种灵活的选择器实现方式,从推荐的标准方案到完全自定义的自由模式。开发者应根据项目规模、团队习惯和具体需求选择最适合的方案。对于大多数项目,方案A提供的平衡性和灵活性使其成为首选。
登录后查看全文
热门项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
532
3.74 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
336
178
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
886
596
Ascend Extension for PyTorch
Python
340
403
暂无简介
Dart
771
191
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
openJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力
TSX
986
247
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
416
4.21 K
React Native鸿蒙化仓库
JavaScript
303
355