Является ли метод replace () `класса String нарушением разделения Command-Query? - PullRequest
0 голосов
/ 24 января 2012

Команда Разделение запросов рекомендует, чтобы каждый метод был либо Командой, выполняющей действие, либо Запросом, который возвращает данные вызывающей стороне:

Но как насчет, например, метода replace () класса String.

Его подпись: String replace (String str);

Это нарушает CQS, не так ли?

Признавая, что это нарушает, я не понимаю, какмы можем исправить это так, чтобы replace (), то есть команда, могла сообщать вызывающей стороне о самой новой строке.Действительно, команда в соответствии с CQS должна иметь void в качестве возвращаемого типа.

1 Ответ

8 голосов
/ 24 января 2012

Я не вижу, как это нарушение - конечно, это запрос, в котором он задает вопрос о данных: что бы мы получили, если бы у нас была исходная строка, но с X вместо Y каждый раз?

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

Я не собираюсь утверждать, что что-то приближается к эксперт по CQS, но это String.replace звучит для меня больше похоже на запрос, чем на команду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...