Class 或用于声明全局类型的接口?

Class or interface for declaring global types?

在不同 类 之间重用类型的推荐(现代)方法是什么?

SAP does not recommend 收集接口中的常量,称其为 松散 声明方式:

" anti-pattern
INTERFACE /dirty/common_constants.
  CONSTANTS:
    warning      TYPE symsgty VALUE 'W',
    transitional TYPE i       VALUE 1,
    error        TYPE symsgty VALUE 'E',
    persisted    TYPE i       VALUE 2.
ENDINTERFACE.

同样适用于类型吗?我不知道的缺点或优点是什么?

我应该使用 类、类型接口还是类型池?

正如您链接到的文档所说,您不应该对常量使用接口,因为那样的话您是:

misleading people to the conclusion that constants collections could be "implemented".

这就是为什么他们建议将常量放入 ABSTRACT FINAL class.

ABSTRACT 意味着这个 class 本身不能被实例化(像一个接口)并且 FINAL 它不能被继承(不像一个接口)。这清楚地向用户传达了这个 class 仅作为静态事物的容器存在,例如 CONSTANTSCLASS-DATACLASS-METHODS,当然还有 TYPES.

所以同样的论点可以用于接口,接口什么都不做,只是作为类型的容器。当您为此唯一目的创建 INTERFACE 时,人们可能想知道他们应该如何实现该接口。因此,您可以将它们放入 CLASS 中。


IMO 仍然值得考虑的另一种选择(特别是如果您考虑在数据库表中使用这些类型中的任何一种)是使用旧的 ABAP 词典。它的发明正是为了这个目的:作为全局类型的目录。

不幸的是,它不允许您将类型组织到名称空间中(除非您为 SAP 或 SAP 合作伙伴工作,他们能够并愿意通过官僚机构为每个产品注册一个全球唯一的名称空间)。因此,您必须确保您创建的每个类型都有一个正确的前缀,以便人们知道它属于哪个应用程序。但是字典类型名称有字符限制,所以你必须保持简短。

使用 class 作为每个应用程序类型的容器可以解决该问题。 class 用作命名空间,因此您的类型名称不再需要是系统唯一的。