MVC和MVVM模式
在本文中,我不会详细描述MVC和MVVM模式如何工作。我只给出我们将来需要的要点。
MVC和MVVM之间的主要区别在于,在第一个Controller中,控制器既了解视图又了解模型,还允许View知道模型。
在MVVM模式中,层之间的关系较弱。View仅知道ViewModel和ViewModel only模型。View通过DataContex引用从ViewModel接收数据。
MVVM模式设计用于C#中的WPF开发。但是他的想法也可以应用于ABAP。
ABAP中的MVC问题
实施MVC时,通常将Model类引入全局定义,将View和Controller类引入本地。局部类的使用是由于需要与GUI元素进行交互。关键是不可能在ABAP类上构建完整的GUI。在View类中,可以使用用于形成GUI的功能(CL_SALV_TABLE,REUSE_ALV_GRID_DISPLAY等),但这还不够。在教室中无法创建GUI状态,标题,屏幕,PBO,PAI。
本地视图和控制器有几个缺点:
- View和Controller可以访问选择屏幕的所有全局变量和参数。
- PBO PAI Controller View ( ALV) View ( ALV). View, Controller, View Controller. , .. , Low Coupling.
MVVM ABAP MVA
为了利用ABAP中的MVVM并使各层更加独立,我为自己定义了以下开发模式。
由于不可能在ABAP上以纯格式实现MVVM,因此使用ViewModel并非完全正确。因此,我使用Application代替ViewModel和Controller。
逻辑分离原理类似于MVVM原理。 View将用户命令传递给Application,然后Application对模型进行操作。没有反馈。
ABAP应用程序的功能是只能在用户操作后才能更新视图。即使某些异步过程更改了模型,它也将无法启动视图的更新。此功能使您可以减弱模型与视图的关系,并将将视图更新的功能委托给视图本身。换句话说,创意本身必须决定何时更新自身,何时不更新。
MVA概念
MVA实现基于一种面向对象的方法,其中将为体系结构的每一层实现一个或多个类。每个层都有许多属性。
查看(查看和IView):
- MVA与IView视图抽象一起使用。所有View类都必须包含IView实现。
- IView包含需要与模型进行交互的事件
- IView包含上下文-指向需要向用户显示的模型数据的链接
- 视图可以包含不需要与模型交互的业务逻辑。例如,如果您想从ALV实施交易对手卡,则此逻辑将应用于视图。
- View在与View类关联的一组函数中包含GUI元素。
应用:
- 用作视图和模型的绑定,并且是应用程序的入口点。
- 具有启动条件-一组参数,用于确定应启动应用程序的参数。通常,这些是选择屏幕的参数。
- 应用标准包括模型和表示标准。例如,如果选择屏幕要求您输入过帐日期并指定PDF或ALV报告输出标记,则过帐日期将参考模型标准,而PDF和ALV标志将参考显示标准。
- 启动条件将传递给应用程序设计器。该应用程序创建模型和视图,订阅视图事件,并将视图上下文绑定到模型。
模型:
- 包含视图所需的公共属性。
- 包含用于计算模型的标准和初始化方法。
MVA实施
让我们使用物料流报告的示例来考虑MVA的实现。数据刷新按钮将用作与模型的交互。
类图将如下所示。
模型。模型设计者将数据选择标准作为输入。该类将具有用于初始化和更新数据的方法,以及具有要显示的数据的属性。
IView。视图界面包含用于设置上下文,显示视图,事件和定义上下文类型的方法。
IView包含上下文结构的描述,并且结构字段必须是引用
视图。该视图实现IView接口。此外,所有用户事件均由View类注册,并且仅引发那些需要由应用程序处理的事件。在事件参数中,必须传递视图中所需的所有数据(例如,选定的ALV线)
ALV视图中View类的
实现在此实现中,我们需要定义GUI状态,为此,我们将创建一个FM并将其连接到CL_SALV_TABLE实例
。重要的是,所有UI事件都必须由View接收(在这种情况下,通过ON_USER_COMMAND),如果必要,则View可以为应用程序生成RAISE EVENT。这种方法使视图和应用程序更加独立。
应用。应用程序设计人员将应用程序条件(选择屏幕参数)作为输入,实例化Model和View,订阅View事件,并将View上下文绑定到Model。构造函数是应用程序了解View的唯一位置。应用程序包含用于启动程序的RUN方法。可以将启动应用程序与使用预定义的屏幕参数启动事务进行比较。这使得它可以在没有提交的情况下从其他程序中使用。
启动应用程序。现在,我们正在制作一个程序,将启动该应用程序。
就是这样,应用程序已准备就绪。您可以观看结果。
视图方面的业务逻辑。不需要调用模型和控制器的事件可以在View本身中处理。
例如,如果您想通过双击MATNR来实现打开MM03,则可以在“视图”侧完成此逻辑的处理。
基于以下考虑,此逻辑已移至“视图”级别:不需要为其他数据处理模型;该逻辑仅适用于ALV,即 如果以Excel或PDF的形式实现了View,则无法处理此事件。
参考
ABAP对象中的设计模式
初学者的模式:MVC,MVP和MVVM
ABAP中的体系结构模式:MVC,MVP,MVVM,MVA