? ABAP面向对象设计模式-MVC(Model View Controller) - SAP顾问圈 亚博体育娱乐 ,亚博体育app怎么样,亚博2018网上投注
二维码

[面向对象] ABAP面向对象设计模式--MVC(Model View Controller)

Twilight发表于 2018-01-17 16:551572873912@qq.c 最后回复于 2018-04-13 08:50 [复制链接] 1316 3

MVC是一种软件设计模式,已经被Java、PHP等语言大量使用。MVC设计模式含义:Model模型,指取数处理逻辑;View视图,指数据输出;Controller控制器,用来将Model和View连接起来。其优势明显:将View前端设计和Model后端逻辑处理设计分开,在团队开发时,可以同时开发提高效率,其次 Model提高了代码复用率。
在大而复杂的应用程序开发可以采用这种模式,小应用就浪费时间了。

举例说明:亚博2018网上投注取出数据,通过亚博体育app怎么样、SmartForm、Fiori输出,这里取数处理的逻辑都是一样的,可以共用一个Model,三个View,然后用Controller将他们连接控制起来。
1、Model类
GET_DATA方法Importing参数IR_ERDAT TYPE TPMY_R_DATE

  1. ??METHOD get_data.

  2. ? ? SELECT *
  3. ? ? FROM vbak
  4. ? ? INTO??TABLE t_vbak
  5. ? ? WHERE erdat IN ir_erdat.

  6. ??ENDMETHOD.
复制代码



2、Controller类
GET_OBJECT方法Importing参数IF_NAME TYPE CHAR30

  1. ??METHOD get_object.

  2. ? ? DATA: lo_object TYPE REF TO object.

  3. ? ? CREATE OBJECT lo_object TYPE (if_name).
  4. ? ? IF sy-subrc = 0.
  5. *? ?Downcasting to assign generic object to O_MODEL
  6. ? ?? ?o_model ?= lo_object.
  7. ? ? ENDIF.

  8. ??ENDMETHOD.
复制代码



3、ALV输出调用代码:
  1. REPORT y001.

  2. START-OF-SELECTION.
  3. *--------------------------------------------------------------------*
  4. * Controller
  5. *--------------------------------------------------------------------*
  6. ??DATA: lo_control TYPE REF TO zcl_control.

  7. * Iniiate controller
  8. ??CREATE OBJECT lo_control.

  9. * Get the object from Control
  10. ??CALL METHOD lo_control->get_object
  11. ? ? EXPORTING
  12. ? ?? ?if_name = 'ZCL_MODEL'.

  13. *--------------------------------------------------------------------*
  14. * Model - Business Logic
  15. *--------------------------------------------------------------------*
  16. * Date Range
  17. ??DATA: r_erdat??TYPE RANGE OF vbak-erdat,
  18. ? ?? ???la_erdat LIKE LINE OF r_erdat.

  19. ??la_erdat-sign = 'I'.
  20. ??la_erdat-option = 'BT'.
  21. ??la_erdat-low = sy-datum - 10.
  22. ??la_erdat-high = sy-datum.
  23. ??APPEND la_erdat TO r_erdat.

  24. * Get data method
  25. ??CALL METHOD lo_control->o_model->get_data
  26. ? ? EXPORTING
  27. ? ?? ?ir_erdat = r_erdat.
  28. *
  29. *--------------------------------------------------------------------*
  30. * View - ALV output
  31. *--------------------------------------------------------------------*
  32. ??DATA: lo_alv TYPE REF TO cl_salv_table.

  33. ??DATA: lx_msg TYPE REF TO cx_salv_msg.
  34. ??TRY.
  35. ? ?? ?cl_salv_table=>factory(
  36. ? ?? ???IMPORTING
  37. ? ?? ?? ? r_salv_table = lo_alv
  38. ? ?? ???CHANGING
  39. ? ?? ?? ? t_table? ?? ?= lo_control->o_model->t_vbak ).
  40. ? ? CATCH cx_salv_msg INTO lx_msg.
  41. ??ENDTRY.

  42. * Displaying the ALV
  43. ??lo_alv->display( ).
复制代码
4、SmartForm输出调用代码:
  1. REPORT y002.

  2. START-OF-SELECTION.
  3. *--------------------------------------------------------------------*
  4. * Controller
  5. *--------------------------------------------------------------------*
  6. ??DATA: lo_control TYPE REF TO zcl_control.

  7. * Iniiate controller
  8. ??CREATE OBJECT lo_control.
  9. *
  10. * Get the object from Control
  11. ??CALL METHOD lo_control->get_object
  12. ? ? EXPORTING
  13. ? ?? ?if_name = 'ZCL_MODEL'.

  14. *--------------------------------------------------------------------*
  15. * Model - Business Logic
  16. *--------------------------------------------------------------------*
  17. * Date Range
  18. ??DATA: r_erdat??TYPE RANGE OF vbak-erdat,
  19. ? ?? ???la_erdat LIKE LINE OF r_erdat.

  20. ??la_erdat-sign = 'I'.
  21. ??la_erdat-option = 'BT'.
  22. ??la_erdat-low = sy-datum - 10.
  23. ??la_erdat-high = sy-datum.
  24. ??APPEND la_erdat TO r_erdat.

  25. * Get data method
  26. ??CALL METHOD lo_control->o_model->get_data
  27. ? ? EXPORTING
  28. ? ?? ?ir_erdat = r_erdat.
  29. *
  30. *--------------------------------------------------------------------*
  31. * View - Smartform Output
  32. *--------------------------------------------------------------------*
  33. * Smartform FM
  34. ??DATA: l_form TYPE tdsfname VALUE 'ZTEST_MVC',
  35. ? ?? ???l_fm? ?TYPE rs38l_fnam.

  36. ??CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  37. ? ? EXPORTING
  38. ? ?? ?formname? ?? ?? ???= l_form
  39. ? ? IMPORTING
  40. ? ?? ?fm_name? ?? ?? ?? ?= l_fm
  41. ? ? EXCEPTIONS
  42. ? ?? ?no_form? ?? ?? ?? ?= 1
  43. ? ?? ?no_function_module = 2
  44. ? ?? ?OTHERS? ?? ?? ?? ? = 3.

  45. * calling Smartform FM
  46. ??DATA: ls_control??TYPE ssfctrlop.??" Controlling info
  47. ??DATA: ls_composer TYPE ssfcompop.??" Output info
  48. *
  49. ??CALL FUNCTION l_fm
  50. ? ? EXPORTING
  51. ? ?? ?control_parameters = ls_control
  52. ? ?? ?output_options? ???= ls_composer
  53. ? ?? ?user_settings? ?? ?= ' '
  54. ? ?? ?t_vbak? ?? ?? ?? ? = lo_control->o_model->t_vbak
  55. ? ? EXCEPTIONS
  56. ? ?? ?formatting_error? ?= 1
  57. ? ?? ?internal_error? ???= 2
  58. ? ?? ?send_error? ?? ?? ?= 3
  59. ? ?? ?user_canceled? ?? ?= 4
  60. ? ?? ?OTHERS? ?? ?? ?? ? = 5.
  61. ??IF sy-subrc <> 0.
  62. ? ? MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  63. ? ?? ?? ?? ?WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  64. ??ENDIF.
复制代码

Kd330
发表于 2018-1-18 11:27:21
感觉用mvc最好的就是Asp.Net MVC了,因为我只用过这个。
Twilight
发表于 2018-1-18 14:57:52
Kd330 发表于 2018-1-18 11:27
感觉用mvc最好的就是Asp.Net MVC了,因为我只用过这个。

你说的是MVC框架吧,这里是设计模式
1572873912@qq.c
发表于 2018-4-13 08:50:44
楼主用过Fiori?用Fiori 做地图导航,是否可以?MVC架构

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 亚博体育娱乐