разработать метод, возвращающий значение или изменяющий некоторые данные, но не оба одновременно - PullRequest
0 голосов
/ 10 ноября 2018

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

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

Спасибо Оливье

1 Ответ

0 голосов
/ 10 ноября 2018

Этот принцип называется Разделение команд и запросов .

Из Википедия :

Разделение команд и запросов (CQS) - это принцип обязательного компьютерного программирования. Он был разработан Бертраном Мейером как часть его новаторской работы над языком программирования Eiffel.

В нем говорится, что каждый метод должен быть либо командой , выполняющей действие, либо запросом , который возвращает данные вызывающей стороне, но не обоими. Другими словами, Задание вопроса не должно менять ответ . Более формально, методы должны возвращать значение, только если они прозрачны по ссылкам и, следовательно, не имеют побочных эффектов.

Лично я считаю этот принцип очень полезным. Он основан на общем наблюдении, что: когда мы видим функцию, которая возвращает некоторые данные, мы склонны думать , что она не меняет никакого состояния данных. Другими словами, эта функция не имеет побочных эффектов. В противоположность этому, функции с побочными эффектами считаются «рискованными» и поэтому должны иметь четкое указание (возвращающий тип void). Видите ли, C # имеет концепцию Properties , где вы изменяете состояние свойства, используя символ присваивания, который является более сильным показателем, чем методы установки.

В заключение, принцип CQS помогает нашему коду легче читать и рассуждать, так как управление тем, как изменения состояния имеют решающее значение в программировании.

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

...