2017-09-08 285 views
0

我有问题围绕ABAP(SAP)中的MVC方法进行包装。虽然我的问题不是代码相关,而是与概念相关。MVC实现概念(概念(ABAP SAP)

情况:

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

特定设置:

我需要阅读“业务伙伴”(名字&姓)在SAP并打印出来到屏幕的表。该方法应该是MVC,OO和一个单独的数据访问层(DAL)。 - 我的控制器在视图中被实例化。在那里它称为'RETRIEVE_BP(iv_BPart)'。 - 我的控制器基本重复对模型的调用(只是传递数据?) - 我的模型根据从DAL返回的数据创建本地对象。控制器调用模型时会返回此模型。 - 我是一个Singleton,用于从内部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代码非常麻烦。

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

回答

0

由于对MVC架构的不完全理解,我的逻辑有缺陷。这导致了一个独立的模型类和一个'业务伙伴'类导致程序流程中的问题(什么时候调用什么)。

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

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

答案:

  • 没有控制器不应该是一个静态类。它应该是主程序中创建的对象。之后,视图应该访问控制器对象。
  • 否应该没有引用(或私人引用)。视图不应该能够通过使用控制器中的引用直接到达模型。这是MVC架构关注原则的分离。
  • 控制器有一个方法'检索BP'。此方法调用DAL。此DAL从数据库中检索它,创建BP模型的对象。将此对象返回给控制器=>到视图。
  • 查看上面的问题。
  • 这些模型反驳业务逻辑,因为这是您的程序将与之合作的对象。 (在我的情况下,'商业伙伴')