ABAP 整洁之道 作者: wenmo8 时间: 2023-12-25 分类: SAP 目录做法整洁代码入门之法旧代码重构之法自动检查之法与其他指南互通之法表示异议之法名称使用描述性名称首选解决方案域和问题域术语使用复数形式使用能读出来的名称避免缩写在各处使用相同缩写用名词表示类而用动词表示方法避免干扰词,如 "data"、"info"、"object"每个概念选取一个词仅在本意如此时使用模式名称避免编码,特别是匈牙利表示法和前缀语言顾及传统顾及性能面向对象编程优于过程式编程函数式语言结构优于过程式语言结构避免过时语言元素明智地使用设计模式常量使用常量而非幻数枚举类优于常量接口如果不使用枚举类,则对常量进行分组变量内联声明优于最前声明勿在可选分支中内联声明勿用链式最前声明REF TO 优于 FIELD-SYMBOL表使用恰当的表类型避免 DEFAULT KEYINSERT INTO TABLE 优于 APPEND TOLINE_EXISTS 优于 READ TABLE 或 LOOP ATREAD TABLE 优于 LOOP ATLOOP AT WHERE 优于嵌套式 IF避免不必要的表读取字符串使用 ` 定义文字使用 | 汇集文本布尔值明智地使用布尔值用 ABAP_BOOL 表示布尔值使用 ABAP_TRUE 和 ABAP_FALSE 进行比较使用 XSDBOOL 设置布尔变量条件尽量使条件为正IS NOT 优于 NOT IS考虑分解复杂条件考虑提炼复杂条件If 语句无空的 IF 分支对于多个备选条件,CASE 优于 ELSE IF保持低嵌套深度正则表达式较简单的方法优于正则表达式基本检查优于正则表达式考虑汇集复杂的正则表达式类NEW 优于 CREATE OBJECT如果全局类为 CREATE PRIVATE,则保留 CONSTRUCTOR 为公有多个静态创建方法优于可选参数用描述性名称表示多个创建方法仅在多实例无意义的情况下变成单例缺省情况下为全局,仅在适当位置为局部若非为继承而设计则为 FINAL缺省情况下为 PRIVATE,仅在需要时为 PROTECTED考虑使用不可变对象而非 getter保守地使用 READ-ONLY对象优于静态类组合优于继承勿在同一个类中混用有态和无态类:面向对象作用域构造函数方法快速失败CHECK 对 RETURN避免在其他位置使用 CHECK做且仅做一件事,把它做好关注愉快路径或错误处理,但非两者兼顾将抽象降一级保持方法精简清除或覆盖 EXPORTING 引用参数勿清除 VALUE 参数如果输入和输出可能相同则要当心考虑调用 RETURNING 参数 RESULTRETURNING 优于 EXPORTINGRETURNING 大表通常没有问题单独使用 RETURNING 或 EXPORTING 或 CHANGING,而不要组合使用在合适时保守地使用 CHANGING拆分方法而非使用布尔输入参数力图减少 IMPORTING 参数,最好少于三个拆分方法而非添加 OPTIONAL 参数保守地使用 PREFERRED PARAMETERRETURN、EXPORT 或 CHANGE 恰有一个参数实例优于静态方法公共实例方法应为接口的一部分函数式调用优于过程式调用省略 RECEIVING省略可选关键字 EXPORTING在单参数调用中省略参数名称在调用实例方法时省略自我引用 me调用方法:面向对象参数数目参数类型参数名称参数初始化方法体控制流错误处理包裹外来异常而非任其侵入代码使用各自的超类抛出一种类型的异常使用子类以便调用者能够区分错误情况针对可应对的异常抛出 CX_STATIC_CHECK针对通常不可恢复的情况抛出 CX_NO_CHECK针对可避免的异常考虑 CX_DYNAMIC_CHECK针对完全不可恢复的情况进行转储RAISE EXCEPTION NEW 优于 RAISE EXCEPTION TYPE异常针对的是错误,而不是正常情况使用基于类的异常异常优于返回代码别让故障溜走使消息易于查找消息返回代码异常抛出捕获注释用代码表达自己而不是靠注释注释绝非坏名称的借口使用方法而非注释来对代码分段写注释是要解释为什么而非是什么设计应放到设计文档里而不是代码里用 " 而非 * 加注释将注释放在与其相关的语句前面删除代码而非将其注释掉使用 FIXME、TODO 和 XXX 并添加自己的标识勿添加方法签名和注释结尾勿复制消息文本作为注释ABAP 文档仅适用于公共 API编译指示优于伪注释格式化保持一致为阅读而不是书写进行优化激活前使用格式优化器使用格式优化器团队设置每行只有一条语句恪守合理的行长度紧缩代码添加单一空行来分隔内容,而不要添加多行勿因分隔空行产生困扰对齐同一对象而非不同对象的赋值在行尾关闭括号保持单参数调用于一行保持参数在调用后面如果换行,则在调用下缩进参数将多个参数换行对齐参数如果调用行过长则将其换行缩进并卡到制表位如同方法调用那样缩进内联声明勿对齐类型子句测试少而精的断言使用恰当的断言类型断言内容而非数量断言质量而非内容使用 FAIL 检查是否出现预期异常转发意外异常而非捕获就失败编写自定义断言以缩短代码和避免重复使其易于辨明含义使其易于辨明差异使用常量描述测试数据的用途和重要性测试方法名称:反映出设想和预期的情形使用 given-when-then"When" 恰为一个调用除非真正需要否则勿添加 TEARDOWN使用依赖倒置注入测试替身考虑使用 ABAP 测试替身工具利用测试工具使用测试缝隙作为临时解决办法使用 LOCAL FRIENDS 访问依赖倒置的构造函数勿滥用 LOCAL FRIENDS 侵入被测代码勿更改生产代码来使代码可测试勿子类化来模拟方法勿模拟不需要的东西勿构建测试框架赋予被测代码有意义的名称,或使用缺省名称 CUT测试接口而非类将被测代码的调用提取到自身的方法按用途调用局部测试类将测试放在局部类将帮助方法放在帮助类如何执行测试类编写可测试的代码让他人能够进行模拟可读性规则勿制作副本或写测试报告测试公共项而非私有内部项勿困扰于覆盖范围原则测试类被测代码注入测试方法测试数据断言https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP_zh.md 标签: none