繁体   English   中英

ABAP中事件的目的是什么?

[英]What is the purpose of events in ABAP?

书本中学习ABAP,我了解了对象/类事件。 我知道其他语言(如C#/ WinForms)的事件是GUI中用户操作(例如按钮单击)与交互后执行的一些代码之间的连接。 也有可能从代码中触发此类事件以模拟用户操作,这有时会很有用。

本书以RAISE EVENT语句结束示例,该语句从代码中手动触发了事件。 这是与其他来源中相同的在线(例如12345 )。 如果我可以直接调用对象方法,则没有任何理由引发代码事件。 在我看来,这似乎是不必要的代码层。 在ABAP中使用事件的目的或好处是什么? 我想念什么?

谢谢你的意见; 他们让我走上了正轨。 许多来源的问题在于它们显示了一个非常简单的示例,其中事件没有带来任何好处。 这与对几行代码使用OOP或使用递归而不是简单的循环相同。 这样的简单示例很好地学习了语法,但不足以了解目的或好处。

在一个类中使用事件和处理程序对我来说没有多大意义。 大多数示例都带有两个类(仍然将可以单独使用的东西放在一起)。 对我而言,包含三个独立代码段的示例带来了最大的好处。 据我了解,关键点是:

  1. A类具有一个由命令EVENTS定义的EVENTS A类不需要引用其他类。 用我的话说:内部可能发生一些其他情况有趣的情况。 该班级不了解外界(不依赖),但是可以向外界表明情况已经发生。
  2. 只有对象A可以通过命令RAISE EVENT从其内部代码引发(触发) RAISE EVENT 用我的话说:情况发生在外面(向所有可能关心和订阅的人广播)。
  3. B类通过METHODS - FOR EVENT – OF命令定义了A类的方法/处理程序,可用于处理事件。 此类需要了解A类及其事件。 用我的话来说:B类提供了处理A类中可能发生的情况的代码。
  4. 一些了解两个类(可能创建它们)的代码的第三部分说:当类A中的事件引发时,使用命令SET HANDLER - FOR使用此处理程序。 最重要的是,它也可以是不同于B的其他类的另一个处理程序。用我的话说:当使用A类时,我可以通过从A不知道的一系列合适的处理程序中进行选择,轻松设置在A发生这种情况后将发生的情况。 。

因为我错过了一个很好的例子,所以这里说明了这些要点:

CLASS lcl_class_a DEFINITION.
  PUBLIC SECTION.
    DATA a1 TYPE I.
    EVENTS: my_event.
    METHODS: method_raising_event.
ENDCLASS.

CLASS lcl_class_a IMPLEMENTATION.
  METHOD method_raising_event.
    "some working code would be here
    RAISE EVENT my_event.
  ENDMETHOD.
ENDCLASS.

CLASS lcl_class_b DEFINITION.
  PUBLIC SECTION.
    "This methods could be run after the event.
    METHODS:  handle_event1 FOR EVENT my_event OF lcl_class_a,
              handle_event2 FOR EVENT my_event OF lcl_class_a.
ENDCLASS.

CLASS lcl_class_b IMPLEMENTATION.
  METHOD handle_event1.
    WRITE: / 'Event in class raised'.
  ENDMETHOD.
  METHOD handle_event2.
    " Some code, e.g. logging to a file.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  DATA(object_a) = new lcl_class_a( ).
  DATA(object_b) = new lcl_class_b( ).
  "Binding event and handler.
  SET HANDLER object_b->handle_event1 FOR object_a.

  CALL METHOD object_a->method_raising_event.

加法:

  • 在现实生活中,在类B(处理程序)的对象中引用类A(提升器)的对象很有用。 您可能需要从类A获取有关该事件的其他信息。但这不是必需的。
  • 可以将更多处理程序附加到一个事件。

当了解某些设计模式时,目的或好处会更加清晰。 有人提到了一些好处。 我会遵循从一般到特殊的这种层次结构:

  1. 固体
  2. 松耦合/去耦/关注点分离
  3. 依赖倒置原则
  4. 观察者–可观察者/订阅者–发布者

很高兴阅读关于我的答案的评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM