+----------------------------------+ | 主程序 | | INCLUDE zprog_top. | ← Top include(数据声明) | INCLUDE zprog_cls. | ← 类定义 | INCLUDE zprog_pbo. | <-- PBO 模块(对话程序) | INCLUDE zprog_pai. | <-- PAI 模块(对话程序) | INCLUDE zprog_f01. | <-- FORM 例程 | INCLUDE zprog_f02. | <-- FORM 例程(按功能分组) +----------------------------------+
Include
用途
Top include(_top)
全局数据声明、TYPES、CONSTANTS
类 include(_cls)
局部类定义和实现
Form include(_f01、_f02、…)
按功能分组的模块化 FORM 例程
💡Top include 模式集中了所有数据声明。这防止重复声明并提供程序数据的清晰概览。
模块化建议
建议
原因
优先使用方法而非 FORM
方法在类中:更好的封装、继承、接口
使用类(局部或全局)
面向对象设计更易维护
保持模块化单元简短
更容易测试和理解
每个单元单一职责
每个方法/FORM 应做一件事
避免过程中使用全局变量
显式传递参数
错误处理
级别
方法
数据库操作
立即检查 sy-subrc
基于类的异常
TRY ... CATCH ... ENDTRY 配合异常类
断言
ASSERT 用于开发者不变量
函数模块
通过 EXCEPTIONS 或基于类的异常处理
返回值
使用返回参数,而不仅是 sy-subrc
1 2 3 4 5 6 7 8 9 10 11 12
" 好:立即检查 sy-subrc SELECT SINGLE * FROM sflight INTO ls_flight WHERE carrid = 'LH'. IF sy-subrc <> 0. " 处理错误 ENDIF.
" 好:基于类的异常处理 TRY. lo_handler->process_order( ls_order ). CATCH cx_static_check INTO lx_error. MESSAGE lx_error->get_text( ) TYPE 'S' DISPLAY LIKE 'E'. ENDTRY.