首页 > 解决方案 > 带有材料清单的课程:最佳实践

问题描述

我创建了自定义类 ZMaterial,可以将其实例化,将 ID 传递给构造函数,该构造函数使用 SELECT 和 BAPI 设置单个材料的属性。此类基本上用于读取和更新单个材料。

现在我需要创建一个服务来返回一个材料列表。我已经在静态方法(现在实际上是一个功能模块)中拥有它的程序代码,但我想继续使用完整的 OOP 方法并实例化我的自定义材质对象的列表。我发现的第一种方法是增强静态方法以在执行选择后实例化我的单个材质对象的列表,并且我在内部表中有数据,但它似乎不是最 OOP。

我想到的第二个选项是创建一个新类 ZMaterialList,其中一个属性是对象列表 ZMaterial,然后是一个具有数据库选择所需输入参数的构造函数。我看到这个选项的问题是我只为构造函数创建了一个完整的类。

你认为最好的方法是什么?

标签: oopabap

解决方案


创建一个单独的类来生成材料列表。单一职责原则说每个类都应该做一件事。除了最简单的情况外,使用一个东西与生产它是不同的责任。

不要创建 ZMaterialList 类。列表的重点是管理列表项,即添加、删除、迭代、排序等。但是您应该可以使用常规的 ZMaterial 参考标准表。

根据您想要生成 ZMaterials 的精确方式,制作 ZMaterialReader、-Repository、-Query 或 -Factory 类等。读取器通过键读取,存储库读取和写入,查询使用不同的选择标准集,工厂使用可能不同的输入集进行实例化。

您可以很好地让该类使用下面的原始 FUNCTION。利用已有的东西是一种很好的风格。只需确保您信任该代码,将其放入测试工具中,并使其远离您的其余 oo 代码。

将 ZMaterial 的所有公共交互提取到一个接口并仅使用该接口。这允许您提供 ZMaterial 的替代实现,它们的生成方式或存储数据的方式不同。

将单件生产与批量生产分开。阅读 MARA 以检索单个材料是可以的。但是您不希望成千上万的 ZMaterials 单独读取 MARA - 这会破坏性能。

现在你已经有了接口,你可以提供 ZMaterial 的第二个实现,它的构造函数接收所有相关数据并依赖它已经被验证以避免额外的选择。

您还可以提供一种实现,它根本不存储其数据,而只将指向内部表中行的指针存储在其他地方。有关想法,请参阅元模式。

如果您希望对材料进行大规模更新,例如“将所有这些重新分类为 B”,请考虑将这些面向列表的操作也提取到单独的类中。


推荐阅读