Создайте отдельный класс для составления списка материалов. принцип одиночной ответственности гласит, что каждый класс должен делать только одно.Во всех случаях, кроме самых простых, , использующих вещь, является другой ответственностью, чем , производящий ее.
Не создавайте класс ZMaterialList.Фокусом списка будет управление элементами списка, т. Е. Добавление, удаление, итерация, сортировка и т. Д. Но у вас должно быть все в порядке с обычной стандартной таблицей REF TO ZMaterial.
Создайте ZMaterialReader, -Repository, -Queryили -Factory class или тому подобное, в зависимости от того, как именно вы хотите производить ZMaterials.Читатели читают по ключам, репозитории читают и пишут, запросы используют различные наборы критериев выбора, фабрики создают экземпляры с, возможно, различными наборами входных данных.
Вы можете позволить этому классу использовать исходную функцию FUNCTION внизу.Это хороший стиль, чтобы использовать то, что уже есть.Просто убедитесь, что вы доверяете этому коду, поместите его в тестовый комплект и держите его подальше от остальной части своего oo-кода.
Извлеките все общедоступные взаимодействия ZMaterial в интерфейс и используйте только этот интерфейс.Это позволяет предлагать альтернативные реализации ZMaterial, отличающиеся способом производства и хранения данных.
Разделение отдельного производства от массового производства.Чтение MARA для получения одного материала - это нормально.Но вы не хотите, чтобы тысячи ZMaterials читали MARA по отдельности - это снижает производительность.
Теперь, когда у вас есть интерфейс, вы можете предложить вторую реализацию ZMaterial, конструктор которого получает все соответствующие данные и уже полагается на них.будучи проверенным, чтобы избежать дополнительных SELECT.
Вы также можете предложить реализацию, которая вообще не хранит свои данные, а только хранит указатели на строки во внутренних таблицах где-то еще.См. Шаблон flyweight для идей.
Если вы ожидаете массовых обновлений материалов, таких как «переклассификация всех их как B», рассмотрите возможность выделения этих операций, ориентированных на список, в отдельные классы какхорошо.