Что не так с А? Он выполняет вычисления только в одном месте и не изменяет состояние, поэтому calc_with_state - это метод, который не изменяет состояние, а также «простое» поведение. Если состояние было сложным, оно останавливает передачу большого количества параметров в функцию расчета.
Однако, если вычисление может быть записано с использованием состояния в качестве параметра (как в C), вы можете отделить вычисление. Преимущества здесь включают возможность рутировать этот расчет для данных, не относящихся к классу C, а также вы можете использовать функцию в качестве данных, передаваемых в C, так что calc_with_state может быть использован для вызова различных функций вычислений
Я не вижу, чтобы B имел какие-либо преимущества, так как inner_calc не использует класс и поэтому вполне может быть бесплатной функцией.
Так что я бы, вероятно, сначала записал бы его как A, а затем, если бы захотелось повторно использовать вычисления, заставить класс использовать другие вычисления или просто, если код вычисления стал слишком большим, вы могли бы выполнить рефакторинг в класс C