Creo que el 'punto de salida único' está sobrevalorado. Mantenerlo demasiado dogmáticamente puede conducir a un código muy complejo, que en realidad debería tener múltiples puntos de salida o dividirse en métodos más pequeños.
Yo diría que la elección entre los dos depende de la semántica.
'Si alguna condición es verdadera, haz esto, de lo contrario haz' mapas perfectamente en if-else.
'Si hay alguna condición, haga algo de limpieza y rescate' se correlaciona mejor con el Código 2. Esto se llama patrón de protección. Esto deja el cuerpo del código como normal, claro y despejado por indentaciones innecesarias como sea posible. Se usa comúnmente para validar parámetros o estados (verificar si algo es nulo, o algo está en caché, cosas así).
if (user == null) {
RedirectToLogin();
return;
}
DisplayHelloMessage(user.Name);
No es raro ver ambas formas utilizadas en el mismo proyecto. Cuál usar, como digo, depende de lo que intentas transmitir.
Gran pregunta, no he visto una pregunta provocar una competencia tan estrecha entre dos enfoques diferentes. – Fenton