是否使用结构对单个属性进行分组?
Use structures to group individual attributes or not?
我不确定如何充分利用 ABAP 结构和 class 属性。
假设我有包含 4 个字段的对象操作:操作 ID、类型、描述和日期。
现在我可以用这 4 个属性创建一个 class,但是如果我想要一个构造函数,我需要 4 个单独的参数或一个需要映射到每个属性的结构。如果我想在一个结构中获取所有这些对象数据,例如通过 RFC 获取 return,也会发生同样的情况。然后一个方法get_operation_details( )
需要一个一个映射所有的。
如果我将结构类型 ty_operation_details
用作单个 class 属性,那么当我向结构添加字段时,构造函数也会保持有效,并且 get_operation_details( )
方法会也总是可以的。但是,如果我在 public 部分中直接使用 READ-ONLY
属性,那么使用 Operation->get_details( )-operationID
而不是 operation->operation_ID
似乎是错误的。我想第一种方法在 OO 世界中更正确,但我们失去了一些 ABAP 的好处。
你推荐使用什么?也许它可以允许第一个选项并同时使用结构的一件事是 CORRESPONDING
语句能够将 class 属性映射到平面结构,但我认为这是不可能的。
与大多数事物一样,您的设计应该遵循您的用途。如果您主要将一组属性一起使用,请考虑将它们分组到一个结构中。如果您主要单独使用它们,或者以不同的重组方式使用它们,请将它们分开。
一些注意事项:
如果您总是 create/update/delete 将一组属性放在一起,则分组可以缩短调用时间。您已经发现了这个优势。
分组揭示了字段之间的逻辑关系,当保持字段分开时,这些逻辑关系并不清楚。例如,这可能表明您的参数的一部分是强制性的,而其余部分形成几个可选集。
分组简化了对状态进行操作的功能,例如 Memento 或 Flyweight 模式,因为它允许将对象的状态提取、存储和恢复为单个结构。
另外,像许多其他事情一样,将这个 非此即彼 问题变成 我将简单地使用两者.例如,如果您的 class 有四个单独的属性,为什么不仍然提供一种方法来设置或获取它们作为一个结构?当然,这会添加一些映射,但映射仍将封装在您自己的 class 中,而消费者会获得一个易于使用的界面。
我不确定如何充分利用 ABAP 结构和 class 属性。
假设我有包含 4 个字段的对象操作:操作 ID、类型、描述和日期。
现在我可以用这 4 个属性创建一个 class,但是如果我想要一个构造函数,我需要 4 个单独的参数或一个需要映射到每个属性的结构。如果我想在一个结构中获取所有这些对象数据,例如通过 RFC 获取 return,也会发生同样的情况。然后一个方法get_operation_details( )
需要一个一个映射所有的。
如果我将结构类型 ty_operation_details
用作单个 class 属性,那么当我向结构添加字段时,构造函数也会保持有效,并且 get_operation_details( )
方法会也总是可以的。但是,如果我在 public 部分中直接使用 READ-ONLY
属性,那么使用 Operation->get_details( )-operationID
而不是 operation->operation_ID
似乎是错误的。我想第一种方法在 OO 世界中更正确,但我们失去了一些 ABAP 的好处。
你推荐使用什么?也许它可以允许第一个选项并同时使用结构的一件事是 CORRESPONDING
语句能够将 class 属性映射到平面结构,但我认为这是不可能的。
与大多数事物一样,您的设计应该遵循您的用途。如果您主要将一组属性一起使用,请考虑将它们分组到一个结构中。如果您主要单独使用它们,或者以不同的重组方式使用它们,请将它们分开。
一些注意事项:
如果您总是 create/update/delete 将一组属性放在一起,则分组可以缩短调用时间。您已经发现了这个优势。
分组揭示了字段之间的逻辑关系,当保持字段分开时,这些逻辑关系并不清楚。例如,这可能表明您的参数的一部分是强制性的,而其余部分形成几个可选集。
分组简化了对状态进行操作的功能,例如 Memento 或 Flyweight 模式,因为它允许将对象的状态提取、存储和恢复为单个结构。
另外,像许多其他事情一样,将这个 非此即彼 问题变成 我将简单地使用两者.例如,如果您的 class 有四个单独的属性,为什么不仍然提供一种方法来设置或获取它们作为一个结构?当然,这会添加一些映射,但映射仍将封装在您自己的 class 中,而消费者会获得一个易于使用的界面。