Как и когда я могу использовать классы с сохранением состояния и отсутствием состояния? - PullRequest
0 голосов
/ 25 марта 2020

В Очистить ABAP говорится, что следует использовать классы с сохранением состояния и без учета состояния отдельно, а не смешивать их. Что это влечет за собой в точности?

Только зависимости классов или неизменяемые атрибуты в качестве атрибутов в классах без сохранения состояния, а остальное строго функционально с передачей параметров?

И затем в классах с состоянием, работающих в основном на частных атрибутах без особого использования возвращаемых параметров?

Приветствия

1 Ответ

1 голос
/ 26 марта 2020

Ваш вопрос очень широкий, без конкретной детализации или воспроизводимого кода. Ожидайте, что люди проголосуют за это или даже предложат закрыть это. Этот вопрос мог бы лучше вписаться в сайт разработки программного обеспечения Stack Exchange. В любом случае, как и большинство вопросов, он заслуживает ответа.

В разделе «Чистый ABAP» в первую очередь говорится, что нельзя смешивать две парадигмы в одного класса . Один класс должен быть либо полностью одним, либо другим.

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

Функциональное программирование содержит это во всей своей чистоте и требует, например, чтобы входные данные метода не изменялись, а чтобы метод создавал новые экземпляры, представляющие результат. (Неизменяемость)

Объектно-ориентированное программирование обычно немного более расслаблено. Например, ваш класс, как правило, все еще будет «без сохранения состояния», если его методы записывают в me->log, класс сохраняет me->buffer для оптимизации производительности и имеет метод add_empty_line( log ), который выполняет log->add( space ).

Эти примеры также показывают, что у класса без состояния могут быть атрибуты с состоянием: me->buffer, скорее всего, внутренняя таблица или объект с состоянием с сохранением.

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

Оптимальный класс с оптимальным состоянием будет иметь только те методы, которые работают с атрибутами класса.

Эти методы могут возвращать что-то а также, это не запрещено или необычно. Например, метод remove может не только удалить строку из me->entries, но и вернуть эту удаленную запись для дальнейшей обработки. Метод find, конечно, вернет найденную запись. Типичные другие шаблоны включают возвращение me для включения цепочки методов.

Напротив, методы без состояния, которые получают ввод и выдают результат без взаимодействия с атрибутами класса, часто не очень хорошо вписываются в состояние с состоянием класс, потому что они ослабляют сплоченность класса: почему вы помещаете этот метод здесь, а не в какой-то совершенно другой класс?

...