oop - 用于声明全局类型的类或接口(interface)?

标签 oop abap

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

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

" 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.

这同样适用于类型吗?有哪些我不知道的缺点或优点?

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

最佳答案

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

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

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

ABSTRACT 意味着这个类本身不能被实例化(像一个接口(interface))和 FINAL 它不能被继承(不像一个接口(interface))。这清楚地向用户传达了此类仅作为静态内容的容器存在,例如 CONSTANTCLASS-DATACLASS-METHODS 和类(class)类型

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


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

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

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

关于oop - 用于声明全局类型的类或接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62758463/

相关文章:

ide - ABAP IDE 中双击的键盘快捷键

string - 将字符串混合输入拆分为单个值的范围

abap - 使用 CL_SALV_TABLE 在一个屏幕上显示两个表

perl - 如何组织 Perl 对象的私有(private)方法?

java - 如何在Achartengine(Android)中分离主代码和图表代码

c# - 在不存在方法的类中是否需要私有(private)字段?

abap - 检查结构中的记录是否存在于簇表中

ruby - Ruby 中的 `self` 发生了什么变化?

java - 为什么我们在 Java 中为子对象分配父引用?

abap - 在 ABAP 中调用方法时 CHANGING 关键字的意义是什么?