MVC实施 - 概念(ABAP SAP)

时间:2017-09-08 09:48:19

标签: model-view-controller

我有问题围绕着ABAP(SAP)的MVC方法。虽然我的问题不是与代码相关,而是与概念相关。

情况:

该视图需要1个参数。它创建控制器的对象并将参数交给控制器。控制器将该输入重新路由到模型。该模型从数据访问类请求数据,检索数据,为该数据创建对象并将对象返回给控制器。控制器将数据传递给视图。它读取对象的属性并将其打印到屏幕上。

特定设置:

我需要从SAP的表格中读取“业务合作伙伴”(名字和姓氏)并将其打印到屏幕上。该方法应该是MVC,OO和单独的数据访问层(DAL)。 - 我的控制器在视图中实例化。在那里它叫'RETRIEVE_BP(iv_BPart)'。 - 我的控制器基本上重复了对模型的调用(只是传递数据?) - 我的模型根据DAL返回的数据创建一个本地对象。控制器调用模型时返回此模型。 - 我是一个单例,用于访问和检索内部SAP表中的数据。这将返回此表的唯一类型。

模型中从DAL检索的方法:

method RETRIEVE_BP.

  data ls_bp TYPE BAPIBUS1006_CENTRAL_PERSON.
  ls_bp = mo_dal->get_buspartner( EXPORTING iv_bpart = iv_bpart ).
  create OBJECT mo_bp EXPORTING firstname = ls_bp-firstname lastname = ls_bp-lastname.
  rv_bpart = mo_bp.

endmethod.
控制器中的

方法:

method GET_BUSPARTNER.

  rv_bpart = mo_mdl_bp->retrieve_BP( exporting iv_BPART = iv_BPART ).

endmethod.

的问题:

  • 因为我的控制器只是传递信息。这应该是静态类吗?否则我的控制器应该在哪里实例化?
  • 我应该在控制器中为我的模型保留一个本地参考。因此能够通过控制器对象直接在视图中访问我的模型。无需使用视图中的传入参数重复调用。
  • 我在哪里构建我的“业务合作伙伴”对象以将其传递回控制器。从那里到视图?
  • 我应该在哪里打电话给我的DAL?
  • 如果我从我的业务合作伙伴类中分离出我的模型。模型应该是单身人士吗?

在回答时,完全可以抽象出ABAP代码,并坚持使用Java或C#中的示例。我已经有了一个有效的解决方案我要求提高我的理解力。

由于此代码是SAP系统的一部分,我没有生成代码示例,因此在没有UI组件的情况下分发ABAP代码非常麻烦。

如果我在这里发布任何错误一如既往。请指正,并指引我到正确的地方。如果缺少任何信息,我很乐意制作此信息。

1 个答案:

答案 0 :(得分:0)

对MVC架构的不完全理解,我的逻辑存在缺陷。这导致了一个单独的模型类和一个“业务合作伙伴”类,它导致了程序流程中的问题(何时调用什么。)

在查看MVC设计的几个高级概述之后,我得出结论,这个术语或多或少被普遍接受。如本教程中所述:https://www.tutorialspoint.com/design_pattern/mvc_pattern.htm

这个想法是: - 视图:负责捕获输入/显示输出。根本没有处理。 - 控制器:处理程序流程。该对象负责实现程序应该能够执行的所有“操作”,以及将这些操作重定向到正确的部分。 - 模型:这些是您将在程序中使用的对象。 (在我的情况下:我的业务合作伙伴对象) - DAL:这是一个用于数据库访问的单例。

的答案:

  • 否则控制器不应该是静态类。它应该是在主程序中创建的对象。之后视图应该访问控制器对象。
  • 不应该没有引用(或私有引用。)视图不应该通过控制器中的引用直接到达模型。这是MVC-Architecture关注原则的分离。
  • 控制器有一个方法'检索BP'。此方法调用DAL。此DAL从DB检索它,创建BP模型的对象。将此对象返回到controller =>到视野。
  • 见上面的问题。
  • 模型重现了业务逻辑:这是您的程序将使用的对象。 (就我而言,是“商业伙伴”。)