Model view controller MVC实施-概念(ABAP SAP)

Model view controller MVC实施-概念(ABAP SAP),model-view-controller,Model View Controller,我遇到了一个问题,就是在ABAP(SAP)中采用MVC方法。虽然我的问题与代码无关,但与概念相关 情况: 该视图采用1个参数。它创建控制器的对象并将参数传递给控制器。控制器将该输入重新路由到模型。模型从数据访问类请求数据,检索数据,为该数据创建一个对象,并将该对象返回给控制器。控制器将数据传递给视图。它读取对象的属性并将其打印到屏幕上 具体设置: 我需要从SAP中的表中读取“业务合作伙伴”(Firstname和Lastname),并将其打印到屏幕上。方法应该是MVC、OO和独立的数据访问层(DA

我遇到了一个问题,就是在ABAP(SAP)中采用MVC方法。虽然我的问题与代码无关,但与概念相关

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

具体设置: 我需要从SAP中的表中读取“业务合作伙伴”(Firstname和Lastname),并将其打印到屏幕上。方法应该是MVC、OO和独立的数据访问层(DAL)。 -我的控制器在视图中实例化。在那里,它称为“检索BP(iv_BPart)”。 -我的控制器基本上会重复对模型的调用(只是传递数据?) -我的模型根据DAL返回的数据创建一个本地对象。当控制器调用该模型时,将返回该模型。 -My是用于从内部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.
问题:
  • 因为我的控制器只是传递信息。这应该是一个静态类吗?否则,我的控制器应该在哪里实例化
  • 我是否应该在控制器中保留模型的本地引用。因此,可以通过控制器对象在视图中直接访问我的模型。不再需要使用视图中的传入参数重复调用
  • 在何处构造“业务伙伴”对象以将其传递回控制器。从那里到风景区
  • 我应该在哪里打电话给我的朋友
  • 如果我将我的模型与我的业务伙伴类分开。模型应该是单体模型吗
在回答这个问题时,对ABAP代码进行抽象并只使用Java或C#中的示例是非常好的。我已经有了一个有效的解决方案。我要求提高我的理解力

我没有生成代码示例,因为此代码是SAP系统的一部分,并且在没有UI组件的情况下分发ABAP代码非常混乱


就像往常一样,如果我在这里发帖时犯了任何错误。请指正我,并告诉我正确的地点。如果缺少任何信息,我很乐意提供这些信息。

我的逻辑由于对MVC体系结构的不完全理解而存在缺陷。这导致了一个单独的模型类和一个“业务伙伴”类,这在程序流中引起了问题(何时调用what)

在查看了MVC设计的几个高级概述之后,我得出结论,这个术语或多或少被普遍接受。如本教程所述:

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

答案:
  • 否控制器不应是静态类。它应该是在主程序中创建的对象。之后,视图应该访问控制器对象
  • 不,不应该有引用(或私有引用)。视图不应该能够通过使用控制器中的引用直接到达模型。这是MVC体系结构的关注点分离原则
  • 控制器具有“检索BP”方法。此方法调用DAL。此DAL从数据库中检索它,并创建BP模型的对象。将此对象返回控制器=>视图
  • 见上面的问题
  • 这些模型重新呈现了业务逻辑:这是您的程序将要处理的对象。(就我而言,是“业务合作伙伴”。)