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

Sun*_*her 3 oop abap

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

SAP不建议在接口中收集常量,称其为一种松散的声明方式:

" 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.
Run Code Online (Sandbox Code Playgroud)

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

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

Phi*_*ipp 5

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

误导人们得出常量集合可以“实现”的结论。

这就是为什么他们建议将常量放入一个ABSTRACT FINAL类中。

ABSTRACT意味着这个类本身不能被实例化(像一个接口)并且FINAL它不能被继承(不像一个接口)。这清楚地传达给用户,这个类只存在对于喜欢一成不变的东西的容器CONSTANTSCLASS-DATACLASS-METHODS当然TYPES

因此,同样的参数可以用于除了充当类型容器之外什么都不做的接口。当您INTERFACE为这个唯一目的创建一个时,人们可能想知道他们应该如何实现该接口。所以你会把它们放入 a 中CLASS


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

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

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