oop - 是否使用结构对单个属性进行分组?
问题描述
我怀疑如何充分利用 ABAP 结构和类属性。
假设我有包含 4 个字段的对象 Operation:操作 ID、类型、描述和日期。
现在我可以创建一个具有这 4 个属性的类,但是如果我想要一个构造函数,我需要 4 个单独的参数或一个结构,而不是需要映射到每个属性。如果我想在一个结构中获取所有这些对象数据,例如通过 RFC 返回,也会发生同样的情况。然后一个方法get_operation_details( )
将需要一个一个地映射所有这些。
如果我使用结构类型ty_operation_details
作为单个类属性,那么当我向结构添加字段时,构造函数也将保持有效,并且get_operation_details( )
方法也将始终正常。但是Operation->get_details( )-operationID
,operation->operation_ID
如果我直接在公共部分使用READ-ONLY
. 我想第一种方法在 OO 世界中更正确,但是我们失去了一些 ABAP 的好处。
你推荐使用什么?也许它可以允许第一个选项并同时使用结构的一件事是CORRESPONDING
能够将类属性映射到平面结构的语句,但我认为这是不可能的。
解决方案
像大多数事情一样,您的设计应该遵循您的使用习惯。如果您主要将一组属性一起使用,请考虑将它们分组到一个结构中。如果您主要单独使用它们,或者以不同的组合方式使用它们,请将它们分开。
一些考虑:
如果您总是一起创建/更新/删除一组属性,那么分组会缩短调用时间。您已经确定了这一优势。
分组揭示了字段之间的逻辑关系,当保持字段分开时,这些逻辑关系并不清晰。例如,这可能表明您的参数的一部分是强制性的,而其余的则形成了几个可选集。
分组简化了对状态进行操作的特征,例如 Memento 或 Flyweight 模式,因为它允许将对象的状态提取、存储和恢复为单个结构。
此外,像许多其他事情一样,将这个非此即彼的问题变成我将简单地使用 both可能会有好处。例如,如果你的类有四个单独的属性,为什么不仍然提供一个方法来设置或获取它们作为结构呢?当然,这会添加一些映射,但映射仍会封装在您自己的类中,而消费者会得到一个易于使用的接口。
推荐阅读
- reactjs - 如何在 React 中验证我的选择表单?
- java - 克隆(通过可克隆接口或复制构造函数)对象与在原型模式中创建新对象的性能
- c++ - Implementation of an abstract class with a function that returns a shared pointer
- python - 通过添加列“计数”来合并重复行
- r - 如何编写一个简单的分类器并从中生成合并的数据框
- grep - How to grep text with brackets only
- javascript - Navigate ES6 throught cTags
- solr - Solr 搜索相关性
- ubuntu - 如何找出 Kubectl ZSH 自动完成脚本失败的原因?
- android - How to detect an selected image from camera preview using tensor flow in Android