关于CRM product API的一些代码审查建议

GET_SALES_DATA
Issue1:

关于CRM product API的一些代码审查建议

Issue2:

关于CRM product API的一些代码审查建议

GET_HEADER_WITH_DESC_BY_GUIDS
Issue3:
still remember the cyclomatic complexity concept in my S.O.L.I.D session?
Instead of using

METHODS:
IF < condition is fulfilled>
   DO SOMETHING.
ENDIF.
ENDMETHOD.
use code below to AVOID IF :
METHODS:
CHECK <condition is NOT fulfilled>
DO SOMETHING.
ENDMETHOD.

关于CRM product API的一些代码审查建议

关于CRM product API的一些代码审查建议

get_required_select_list - DRY!!
Issue4:

关于CRM product API的一些代码审查建议

关于CRM product API的一些代码审查建议

The improved solution to avoid SO MANY IF: execute the following report in AG9

REPORT ztest_wei.

TYPES: BEGIN OF ty_select_list_rule,
         flag_name TYPE string,
         operation TYPE string,
       END OF ty_select_list_rule.

TYPES: tt_select_list_rule TYPE STANDARD TABLE OF ty_select_list_rule WITH KEY flag_name.

START-OF-SELECTION.

  DATA: ls_rule TYPE ty_select_list_rule,
        lt_rule TYPE tt_select_list_rule.

  ls_rule = VALUE #( flag_name = 'is_prod_shtext_required' operation = ', \_ProductShortText-ProductName as ShortText' ).
  APPEND ls_rule TO lt_rule.

  ls_rule = VALUE #( flag_name = 'is_material_type_text_required' operation = ', \_MaterialTypeText-MaterialTypeName as MaterialTypeText' ).
  APPEND ls_rule TO lt_rule.

  ls_rule = VALUE #( flag_name = 'is_base_unit_text_required' operation = ', \_BaseUnitText-UnitOfMeasureName as BaseUnitText' ).
  APPEND ls_rule TO lt_rule.

  DATA(ls_data) = VALUE crms4s_required_fields( is_prod_shtext_required = 'X' is_base_unit_text_required = 'X' ).
  DATA(lv_select_list) = CONV string( 'product_h~*' ).

  PERFORM get_required_select_list USING ls_data CHANGING lv_select_list.

  WRITE:/ lv_select_list.

FORM get_required_select_list USING is_required_fields TYPE crms4s_required_fields
        CHANGING ev_select_list TYPE string.
  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE is_required_fields TO FIELD-SYMBOL(<status>).

    IF sy-subrc = 0 AND <status> = abap_true.
      ev_select_list = ev_select_list && lt_rule[ sy-index ]-operation.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.

ENDFORM.

The new implementation only has 9 lines and IFIFIFIFIFIF…IF is avoided:

关于CRM product API的一些代码审查建议

Issue5:
Is this AS really necessary?
关于CRM product API的一些代码审查建议

Issue6:
when to add the error handling in TODO?
关于CRM product API的一些代码审查建议

Update on 2017-02-17
Issue1

关于CRM product API的一些代码审查建议

Issue2
这个method的signature设计地有点confusing,
输入参数里的UOM_DESC和输出参数的UOM_DESC是配对的,这里给我一个错觉,如果IV_UOM_DESC_REQUIRED = TRUE, 那么输出ET_UOM_DESC. 反过来,如果IV_UOM_DESC_REQUIRED = FALSE, 是不是就不输出东西了?

关于CRM product API的一些代码审查建议

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
关于CRM product API的一些代码审查建议