首页 > 解决方案 > 是否使用结构对单个属性进行分组?

问题描述

我怀疑如何充分利用 ABAP 结构和类属性。

假设我有包含 4 个字段的对象 Operation:操作 ID、类型、描述和日期。

现在我可以创建一个具有这 4 个属性的类,但是如果我想要一个构造函数,我需要 4 个单独的参数或一个结构,而不是需要映射到每个属性。如果我想在一个结构中获取所有这些对象数据,例如通过 RFC 返回,也会发生同样的情况。然后一个方法get_operation_details( )将需要一个一个地映射所有这些。

如果我使用结构类型ty_operation_details作为单个类属性,那么当我向结构添加字段时,构造函数也将保持有效,并且get_operation_details( )方法也将始终正常。但是Operation->get_details( )-operationIDoperation->operation_ID如果我直接在公共部分使用READ-ONLY. 我想第一种方法在 OO 世界中更正确,但是我们失去了一些 ABAP 的好处。

你推荐使用什么?也许它可以允许第一个选项并同时使用结构的一件事是CORRESPONDING能够将类属性映射到平面结构的语句,但我认为这是不可能的。

标签: oopattributesabap

解决方案


像大多数事情一样,您的设计应该遵循您的使用习惯。如果您主要将一组属性一起使用,请考虑将它们分组到一个结构中。如果您主要单独使用它们,或者以不同的组合方式使用它们,请将它们分开。

一些考虑:

  • 如果您总是一起创建/更新/删除一组属性,那么分组会缩短调用时间。您已经确定了这一优势。

  • 分组揭示了字段之间的逻辑关系,当保持字段分开时,这些逻辑关系并不清晰。例如,这可能表明您的参数的一部分是强制性的,而其余的则形成了几个可选集。

  • 分组简化了对状态进行操作的特征,例如 Memento 或 Flyweight 模式,因为它允许将对象的状态提取、存储和恢复为单个结构。

此外,像许多其他事情一样,将这个非此即彼的问题变成我将简单地使用 both可能会有好处。例如,如果你的类有四个单独的属性,为什么不仍然提供一个方法来设置或获取它们作为结构呢?当然,这会添加一些映射,但映射仍会封装在您自己的类中,而消费者会得到一个易于使用的接口。


推荐阅读