Во-первых, лучший ответ будет зависеть от нескольких аспектов в контексте, в котором находится код - нет ни одного правильного ответа, кроме «это зависит».
Однако, принимая за чистую монету, Дело А:
Вариант 1 показывает представление алгоритма на верхнем уровне.
Вариант 2 скрывает это, вызовы B & C скрыты. Это может быть довольно много работы, чтобы обнаружить C был вызван. Кроме того, сложнее тестировать A & B изолированно, если они затем вызывают другие методы. Main всегда можно проверить, если A, B и C могут быть подделаны.
Дело B:
Распространено иметь аргументы по поводу наличия 1 точки выхода против нескольких точек выхода в методе. Иногда несколько точек выхода могут упростить код, что делает его более понятным, в других случаях неясно, какое влияние оказывает возврат или что происходит возврат, что делает его менее обслуживаемым.
Вариант 1 показывает алгоритм явно, но несколько вложенных if могут быстро выйти из-под контроля.
В этом случае у меня определенно был бы вариант 2 или какой-нибудь умный логический вариант (да, Кори).
Вариант 3 выглядит для меня просто тупым.