2.1 语法与编程模型
>>Governor Limits
挑战: Salesforce环境有很多运行时限制,如SOQL查询的行数限制、DML操作限制等。
例子: 在Java或Python中,你可以在一个循环内无限次地进行数据库查询。但在Apex中,你需要注意不超过一次事务中最多100个SOQL查询的限制。
参考:Salesforce Developer Limits and Allocations Quick Reference
>>SOQL vs SQL
挑战: SOQL(Salesforce Object Query Language)语法与SQL相似,但功能更受限。
例子: 在SQL中,您可能会使用JOIN,但在SOQL中,您需要使用关系字段名来获取相关对象的信息。例如:SELECT Name, (SELECT LastName FROM Contacts) FROM Account。
>>Asynchronous Programming
挑战: Apex支持的异步编程模型与其他编程语言不同。
例子: 在Java中,你可能使用线程(Threads)进行异步编程,但在Apex中,你可以使用@future注解或更现代的Queueable接口。
参考:Control Processes with Queueable Apex Unit - Trailhead
>>强类型(Strongly Typed)vs 弱类型(Loosely Typed)
挑战: Apex是一种强类型(Strongly Typed)语言,与一些弱类型(Loosely Typed)语言如JavaScript不同。
例子: 在Apex中,你不能像在JavaScript中那样使用var。你需要明确声明变量类型,如Integer i = 5;。
>>SObject and Generic Collections
挑战: Apex中有专门用于Salesforce对象的SObject类型,这可能与其他编程语言中的通用对象或字典类型不同。
例子: 在Python中,你可以使用字典来存储不同类型的键值对。但在Apex中,你通常使用SObject来存储Salesforce对象的数据。
>>Error Handling
挑战: Apex使用try,catch,finally块进行错误处理,这与Java相似,但可能与Python或JavaScript的错误处理机制不同。
例子: 在Apex中,你会使用Database.insert(records, false)来执行一种“全部或无”的插入操作,并在catch块中捕获任何异常。
参考:Exception Handling Example | Apex Developer Guide
>>Test Coverage
挑战: 在Salesforce中,Apex代码必须有至少75%的测试覆盖率才能部署到生产环境。这可能是从其他没有强制测试覆盖率要求的编程语言转过来的开发者的一个挑战。
例子: 在Python或JavaScript中,测试通常是可选的或由团队自行决定。但在Salesforce中,没有达到最低测试覆盖率要求,你将无法将代码部署到生产环境。
解决方案: 使用Apex的内置测试框架编写单元测试,并使用System.assert()方法来验证代码的行为。
参考:Testing Best Practices | Apex Developer Guide
2.2开发工具与环境
开发者在从其他编程环境转到Salesforce时,通常会面对与开发工具和开发环境有关的挑战。
例子:
·Eclipse/IntelliJ vs Salesforce IDEs (VS Code and Salesforce DX): 从其他编程语言(如Java)过来的开发者可能习惯了使用Eclipse或IntelliJ这样的集成开发环境(IDE)。而在Salesforce中,VS Code与Salesforce DX插件已经成为首选。
·Version Control: 在其他编程语言中,如Git用于代码版本控制是很常见的。在Salesforce中,虽然也可以用Git,但与VS Code的集成方式稍有不同。
解决方案:
·Adapt to VS Code and Salesforce DX: VS Code 配合 Salesforce DX 插件提供了一个现代化的工具集,更符合今天开发者的需求。它与Git很好地集成,支持持续集成/持续部署(CI/CD)。
·Learn Scratch Orgs: 在Salesforce中,你可以使用 Scratch Orgs 作为一个临时的、可配置的Salesforce环境,这在其他编程语言中是不常见的。
·Trailhead for Tooling: Salesforce的在线学习平台Trailhead提供了大量与开发工具和环境相关的模块。