前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于CRM product API的一些代码审查建议

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

作者头像
Jerry Wang
发布2019-05-31 10:13:43
4300
发布2019-05-31 10:13:43
举报

GET_SALES_DATA Issue1:

clipboard1
clipboard1

Issue2:

clipboard2
clipboard2

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

代码语言:javascript
复制
METHODS:
IF < condition is fulfilled>
   DO SOMETHING.
ENDIF.
ENDMETHOD.
use code below to AVOID IF :
METHODS:
CHECK <condition is NOT fulfilled>
DO SOMETHING.
ENDMETHOD.
clipboard3
clipboard3
clipboard4
clipboard4

get_required_select_list - DRY!! Issue4:

clipboard5
clipboard5
clipboard6
clipboard6

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

代码语言:javascript
复制
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:

clipboard7
clipboard7

Issue5: Is this AS really necessary?

clipboard8
clipboard8

Issue6: when to add the error handling in TODO?

clipboard9
clipboard9

Update on 2017-02-17 Issue1

clipboard10
clipboard10

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

clipboard11
clipboard11
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档