此贴是转载,并非原创,原创地址 https://wenku.baidu.com/view/773966d3d1f34693dbef3e55.html
1.命名规范
命名规范中禁止出现汉语拼音和无实际意义的命名。
1.1 对象api
规范:把对象标签中的单词以首字母大写的方式连接起来,每个单词之前用“_”下划线连接。
示例:对象标签为Weibo_Account,相对应的api名称应该为:Weibo_Account__c,其中后缀“__c”是系统自动为我们加上去的,我们不需要去填写他。
注意:如果对象标签填写的是中文,那么我们在定义对象名的时候应该把标签用英文翻译过来在按照上面的规则定义对象名称,如:
1.2 字段api
规范:用描述字段的英文单词连接,每个单词首字母大写,单词之间用“_”下划线连接。
示例:字段名称为Weibo Account ID,对应字段API名称为:Weibo_Account_ID__c另外如果有Lookup(查找)类型的字段,要用被引用的对象名作为字段名,如:Weibo Account查找的是Account这个对象,那么字段名就应该为Account而非其他值,子级关系名称就是当前这个对象的名称Weibo_Account,因为Weibo_Account是Account的子对象。
1.3 Class
规范:单词连写,单词首字母大写。
示例:OrderItem。
1.4 Trigger
规范:Trigger名称=对象名+功能名称单词连写,单词首字母大写。
示例:Account对象上有一个自动命名的Trigger就应该为:AccountAutoSetName
1.5 Visualforce
规范:以页面要实现的功能概要命名,单词连写,单词首字母大写。
示例:OrderTarcking
1.6 VF页面控制类
规范:控制类名称=VF页面名称+Controller
示例:OrderTarckingController
1.7 Web Service Class
规范:WebServiceClass名称=类的功能描述+WS
示例:CalculationPriceWS
1.8 Batch Class
规范:Batch 的功能描述并且以Batch结尾。
示例:AutoUpdateAccountStatusBatch
1.9 Schedule Class
规范:Schedule的功能性描述+Schedule结尾。
示例:AutoUpdateAccountStatusSchedule
1.10 测试类
规范:测试类命名以“Test_”开头,连接上被测试的类名
示例:Test_AutoUpdateAccountStatusBatch
1.11 常量
规范:所有的字符都必须大写,采用有意义的单词组合表达式,单词与单词之间用“_”下划线隔开,命名尽量简短,不要超过16个字符。
示例:static final integer PAGE_SIZE = 10;
1.12 变量
规范:变量命名一般采用大小写混和的方式,第一个单词的首字母小写,其后单词的首字母大写,变量名一般不要用下划线或美元符号开头。变量名应简短且有意义,即,能够指出其用途。除非是一次性的临时变量,应尽量避免单个字符的变量名。
示例:String userName =“ ”;
1.13 方法
规范:方法名应是一个动词或动名结构,采用大小写混和的方式,其中第一个单词的首字母用小写,其后单词的首字母大写。
示例:public void checkStatus(){};
注意:每个方法前必须加说明包括:参数说明、返回值说明、异常说明。如果方法名实在是太长可以对变量名缩写,但是必须添加相应的说明。
2. 所有命名一览表
类型 | 规范 | 示例 |
对象 API | 对象名称单词用下划线连接 | Weibo_Account__c |
字段 API | 字段名称单词用下划线连接 | Weibo_Account_ID__c |
Class | 单词连写,首字母大写 | OrderItem |
Trigger | Trigger 名称=对象名+功能 | AccountAutoSetName |
Visualforce页面 | 页面功能描述 | OrderTracking |
VF 页面控制类 | VF 页面的名+Controller 结尾 | OrderTrackingController |
WebService Class | 类功能描述+WS 结尾 | CalculationPriceWS |
Batch Class | 功能描述+Batch 结尾 | AutoUpdateAccountStatusBatch |
Schedule Class | 功能描述+Schedule 结尾 | AutoUpdateAccountStatusSch |
测试类 | Test_+Class 名或 Trigger 名 | Test_OrderItem |
3.代码规范
3.1代码格式
规范:代码缩进要保持一致的缩进量,if、for、while、do 等语句尽量自占一行,执行语句不得紧随其后,不论执行语句有多少都要加{},这样可以美观易读防止书写失误;
示例:如果用这种写法代码如下感觉很乱,如:If (….) {
}
这种写法可读性较好,如:if (….)
{
}
3.2 代码嵌套
尽可能的使用浅嵌套,禁用深嵌套
如下为深嵌套:
这段代码中在for循环中有好多判断,所以导致了,代码嵌套很深,这段代码可以忧化成如下写法,先判断不符合条件的,利用continue语句来控制嵌套层次,如下:
3.3代码注释
3.3.1 组件注释
在类和Trigger的头部添加作者、创建时间、功能描述和约束信息,如果此类需要修改,那么要记录修改时间,修改人,修改内容简介其中:作者、创建时间、功能描述是必需的,结束信息可选,修改人,修改时间,修改内容是必需的。
/*
作者:Michael
创建时间:2017-7-11
功能:(主要功能简介,核心功能,复杂算法)
约束:(可选)
修改人:Sunny
修改时间:2018-01-02
修改内容:
*/
public class ClsMiddlewareServiceWrapper implements lMiddlewareServiceWrapper
{
}
3.3.2 方法注释
对几乎每个方法都应有适当的说明,位于方法声明之前,包括:说明,参数说明、异常说明、返回值说明和特别说明等,如:
3.3.3 变量与关键代码块注释
变量要有注释,关键的代码块也要有相应的注释说明。
//用户部门
string strRepDepartName =‘it’;
//根据部门查询用户信息
List<User> users = [select Id,Department,UserRoleId from User where Department=:strRepDepartName];
代码块注释
4.最佳实践
4.1 ApexCode 最佳实践
4.1.1 避免在for循环中使用SOQL 查询和 DML 操作
Salesforce有限制一次请求中不允许超过100个SOQL查询,和150个DML 操作,所以避免在for循环中做这些操作,尽量使用集合的方式批量操作看下面的代码可以发现,查询语句和更新语句都放在了循环里,如果一次性插入200条数据的话就会超出上面的限制。
修改成批量执行的写法:
在上面的代码中还发现一点就是我在查询客户的时候只查询了一个“Name”字段,因为我需要更新这个字段的值,没用到其他的字段。所以,在我们写查询语句的时候要用到哪些字段,查询哪些字段,以便提高性能。
4.1.2 测试类
测试类有三部分:
1,准备数据
2,执行测试类
3,验证
有三个要求
1,代码覆盖率75%
2,Case 分支覆盖85%
3,测试结果和预期一致
4.1.3 运算符
赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”、“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”、“^”等二元操作符的前后应当加空格 美观,易读;
尽量不这样写:
要这样写:
每一个运算符前后要加一个空格,美观易读。
4.1.4代码长度控制
代码行最大长度宜控制在70至80个字符以内;长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符),拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
如:这样的写法太长了,不容易看
可以换行来控制一下长度,以下写法为推荐的方式:
4.1.5 硬码
- 禁止在代码中出现硬码Id,RecordTypeID,简档id,用户id。
- 禁止在代码中出现硬码引用记录名称,用户名称,简档名称,角色名称
- 如果特殊情况必须要引用的话,建议考虑用CusomeSetting解决,这样也避免了硬码引用的问题,因为CusomeSetting是可配置可以修改的。
4.1.6模块化
不推荐一个方法内超过100行以上代码,除非特殊情况,要把大的代码块拆分功能到不同的方法中。
如果多个组件应用类似逻辑,考虑分离公用方法。
4.2 Force.com Apex Code Best Practices
http://wiki.developerforce.com/page/Apex_Code_Best_Practices
4.3 Force.com Developer Resource
HomePage: http://developer.force.com/
Document: http://wiki.developerforce.com/page/Documentation
4.4 Visualforce 页面最佳实践
详细内容请见:
4.5 字段集
在Salesforce的每个业务对象中都有一个叫字段集的功能,我们可以动态绑定一个字段集显示在VF页面上,这样的好处是,当我们需要调整需要显示的字段时,不需要去修改任何VF页面标签和Apex Code,只需要调整字段集中的字段和摆放顺序就可以实现。
例:如下图所示是一个Account详细信息页面下的一个VF页面,显示的内容是这个客户下所有的联系人信息:
我们看到有好多列,当我们需要调整这些列的时候不需要去改任何代码,只去到联系人这个对象上找到这个页面上绑定的字段集来调整就OK了。
此例中绑定的是DisplayColumns这个字段集,我们可以打开它来编辑它,编辑页面上显示出了联系人上所有的字段,和一个FieldsSet,如果我们需要哪些字段就把它们拖到下面的字段集中就好了,然后保存在刷新页面就可以了,最多限制为50个字段,详细官方解说请见:http://www.salesforce.com/us/developer/docs/pages/Content/pages_dynamic_vf_field_sets.htm
4.6 SOQL查询和SOSL查询
使用Salesforce Object Query Language(SOQL)来查询Salesforce的数据,详细信息查看:http://www.salesforce.com/us/developer/docs/soql_sosl/index_Left.htm#StartTopic=Content/sforce_api_calls_soql.htm
其中包含了语法、聚合函数,关系查询等等。使用Salesforce Object Search Language(SOSL)查询Salesforce的数据,详细信息查看:
4.7 最佳实践参考文章
ApexCode 最佳实践:http://wiki.developerforce.com/page/Apex_Code_Best_Practices
Visualforce 最佳实践:http://www.salesforce.com/us/developer/docs/pages/index_Left.htm#CSHID=pages_compref_additional_render_pdf.htm|Start
Topic=Content%2Fpages_compref_additional_render_pdf.htm|SkinName=webhelp
Force.com 集成设计模式与最佳实践:http://www.salesforce.com/us/developer/docs/integration_patterns/integration_patterns_and_practices.pdf
Force.com 大数据最佳实践:http://www.salesforce.com/us/developer/docs/ldv/salesforce_large_data_volumes_bp.pdf