Class 附材料清单:最佳实践
Class with a list of materials: best practice
我创建了自定义 class ZMaterial,它可以通过将 ID 传递给构造函数来实例化,构造函数使用 SELECT 和 BAPI 为单个 material 设置属性。 class 基本上用于读取和更新单个 material。
现在我需要为 return 个 material 列表创建一个服务。我已经在静态方法中有了它的过程代码(现在实际上是一个功能模块),但我想继续使用完整的 OOP 方法并实例化我的自定义 material 对象的列表。我发现的第一种方法是增强静态方法以在执行 select 之后实例化我的单个 material 对象的列表并且我在内部表中有数据,但它似乎不是最哎呀
我想到的第二个选择是创建一个新的 class ZMaterialList,其中一个 属性 是对象 ZMaterial 的列表,然后是一个具有数据库所需输入参数的构造函数 select.我看到这个选项的问题是我只为构造函数创建了一个完整的 class。
您认为最好的方法是什么?
创建一个单独的 class 来生成 material 的列表。 单一职责原则 说每个 class 应该只做一件事。除了最简单的情况,在所有情况下,使用 与生产 是不同的责任。
不要创建 ZMaterialList class。列表的重点是管理列表项,即添加、删除、迭代、排序等。但是您应该可以使用常规标准 TABLE OF REF TO ZMaterial。
制作 ZMaterialReader、-Repository、-Query 或 -Factory class 等,具体取决于您想要生成 ZMaterials 的精确方式。读者按键读取,存储库读写,查询使用不同的选择标准集,工厂实例化可能有不同的输入集。
你完全可以让class使用下面的原始FUNCTION。利用已有的东西是一种很好的风格。只需确保您信任该代码,将其放入测试工具中,并使其远离您的其他 oo 代码。
将 ZMaterial 的所有 public 交互提取到一个界面并仅使用该界面。这使您可以提供 ZMaterial 的替代实现,这些实现在生成方式或数据存储方式上有所不同。
将单件生产与批量生产分开。阅读 MARA 检索单个 material 是可以的。但是您不希望成千上万的 ZMaterials 单独读取 MARA - 这会破坏性能。
现在你已经有了接口,你可以提供 ZMaterial 的第二个实现,它的构造函数接收所有相关数据并依赖它已经过验证以避免额外的 SELECT。
您还可以提供一种实现,它根本不存储其数据,而仅将指向内部表中行的指针存储在其他地方。请参阅 享元 模式以获取想法。
如果您希望对 material 进行大量更新,例如“将所有这些重新class化为 B”,请考虑提取这些面向列表的操作以分离 class es也是。
我创建了自定义 class ZMaterial,它可以通过将 ID 传递给构造函数来实例化,构造函数使用 SELECT 和 BAPI 为单个 material 设置属性。 class 基本上用于读取和更新单个 material。
现在我需要为 return 个 material 列表创建一个服务。我已经在静态方法中有了它的过程代码(现在实际上是一个功能模块),但我想继续使用完整的 OOP 方法并实例化我的自定义 material 对象的列表。我发现的第一种方法是增强静态方法以在执行 select 之后实例化我的单个 material 对象的列表并且我在内部表中有数据,但它似乎不是最哎呀
我想到的第二个选择是创建一个新的 class ZMaterialList,其中一个 属性 是对象 ZMaterial 的列表,然后是一个具有数据库所需输入参数的构造函数 select.我看到这个选项的问题是我只为构造函数创建了一个完整的 class。
您认为最好的方法是什么?
创建一个单独的 class 来生成 material 的列表。 单一职责原则 说每个 class 应该只做一件事。除了最简单的情况,在所有情况下,使用 与生产 是不同的责任。
不要创建 ZMaterialList class。列表的重点是管理列表项,即添加、删除、迭代、排序等。但是您应该可以使用常规标准 TABLE OF REF TO ZMaterial。
制作 ZMaterialReader、-Repository、-Query 或 -Factory class 等,具体取决于您想要生成 ZMaterials 的精确方式。读者按键读取,存储库读写,查询使用不同的选择标准集,工厂实例化可能有不同的输入集。
你完全可以让class使用下面的原始FUNCTION。利用已有的东西是一种很好的风格。只需确保您信任该代码,将其放入测试工具中,并使其远离您的其他 oo 代码。
将 ZMaterial 的所有 public 交互提取到一个界面并仅使用该界面。这使您可以提供 ZMaterial 的替代实现,这些实现在生成方式或数据存储方式上有所不同。
将单件生产与批量生产分开。阅读 MARA 检索单个 material 是可以的。但是您不希望成千上万的 ZMaterials 单独读取 MARA - 这会破坏性能。
现在你已经有了接口,你可以提供 ZMaterial 的第二个实现,它的构造函数接收所有相关数据并依赖它已经过验证以避免额外的 SELECT。
您还可以提供一种实现,它根本不存储其数据,而仅将指向内部表中行的指针存储在其他地方。请参阅 享元 模式以获取想法。
如果您希望对 material 进行大量更新,例如“将所有这些重新class化为 B”,请考虑提取这些面向列表的操作以分离 class es也是。