Использовать структуры для группировки отдельных атрибутов или нет? - PullRequest
0 голосов
/ 01 октября 2019

Я сомневаюсь, как получить лучшее из структур ABAP и атрибутов класса.

Допустим, у меня есть объект Operation с 4 полями: идентификатор операции, тип, описание и дата.

Теперь я могу создать класс с этими 4 атрибутами, но затем, если я хочу иметь конструктор, мне нужно либо 4 отдельных параметра, либо структура, которую необходимо сопоставить с каждым атрибутом. То же самое происходит, если я хочу получить все эти данные объекта в одной структуре, например, для возврата через RFC. Затем метод get_operation_details( ) должен будет отобразить их все по одному.

Если я использую тип структуры ty_operation_details в качестве атрибута одного класса, то при добавлении поля в структуру также сохранятсядопустимый конструктор и метод get_operation_details( ) также всегда будут в порядке. Однако кажется неправильным иметь что-то вроде Operation->get_details( )-operationID вместо operation->operation_ID, если у меня был атрибут непосредственно в публичном разделе с READ-ONLY. Я думаю, что первый подход является более правильным в мире ОО, но мы теряем некоторые из преимуществ ABAP.

Что вы рекомендуете использовать? Возможно, одна вещь, которая могла бы разрешить первый параметр и одновременно использовать структуры, была бы CORRESPONDING инструкцией, способной отображать атрибуты класса в плоскую структуру, но я не думаю, что это возможно.

1 Ответ

2 голосов
/ 02 октября 2019

Как и большинство вещей, ваш дизайн должен соответствовать вашему использованию. Если вы в первую очередь используете набор атрибутов вместе, рассмотрите возможность их группировки в структуре. Если вы в первую очередь используете их по отдельности или в различных рекомбинациях, держите их отдельно.

Некоторые соображения:

  • Группировка сокращает вызовы, если вы всегда создаете / обновляете / удаляетенабор атрибутов вместе. Вы уже определили это преимущество.

  • Группировка выявляет логические отношения между полями, которые не ясны при разделении полей. Например, это может показать, что одна часть ваших параметров является обязательной, а остальные образуют несколько необязательных наборов.

  • Группировка упрощает функции, которые работают с состоянием, такие как Memento или Flyweightшаблон, в котором он позволяет извлекать, хранить и восстанавливать состояние объекта как единую структуру.

Также, как и многие другие вещи, может быть полезно превратить это или-или вопрос в Я просто буду использовать оба . Например, если у вашего класса есть четыре отдельных свойства, почему бы не предложить метод, который устанавливает или получает их как структуру;конечно, это добавит некоторое сопоставление, но сопоставление останется инкапсулированным в вашем собственном классе, в то время как потребитель получит простой в использовании интерфейс.

...