У каждого есть мнение по этому поводу, но то, что я видел эмпирически, это то, что государство является злом. State вынуждает вас принимать во внимание больше информации при понимании того, как ведет себя класс, поскольку его поведение теперь неявно зависит от состояния. Избегайте этого настолько, насколько позволяет ваша производительность. Я решительно поддерживаю второй способ, который вы упоминаете. Первый способ, скорее всего, вызовет ошибки и головные боли.
Как правило, некоторые из худших методов, которые я видел, имеют подписи, такие как void DoSomething()
: он не принимает параметров и не возвращает значений. Весь смысл метода заключается в его побочных эффектах, которые могут быть неочевидны, если метод имеет плохое имя.
Насколько очевиден первый путь для кого-то еще? Имеет ли смысл иметь что-то под названием getData
, которое на самом деле не возвращает никаких данных? Имеет ли смысл, что getData
манипулирует состоянием объекта? Иногда да, манипулирование объектом ради кеширования является разумным. Но манипулирование объектом для хранения значения, которое вы должны фактически возвращать, вызывает проблемы.
Если вы действительно чувствуете, что должны пойти с первой версией, по крайней мере, назовите ее более точной, например void calculateValue()
или даже void calculateCachedValue()
, что означает, что она действительно не должна ничего возвращать и что вся ее цель состоит в том, чтобы посчитайте что-нибудь еще.