c# - programacion - Aplicación web de tres capas
proyecto completo en c# (3)
¿Está bien, mejor práctica, usar la segunda capa para redirigir al usuario?
Por ejemplo:
public static void ForceLogin()
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];
if (cookie != null)
{
if (Regex.IsMatch(cookie.Value, "^[0-9]+//.[a-f0-9]+$"))
{
using (EibxDataContext db = new EibxDataContext())
{
int count = db.Logins.Count(l => l.Password == cookie.Value);
if (count == 1)
{
return;
}
}
}
}
HttpContext.Current.Response.Redirect("~/Login.aspx");
}
En la última línea, utilizo la capa lógica de negocios / servicios para redirigir al usuario a la página de inicio de sesión.
¿Debería hacerse esto en la capa de Presentación?
Absolutamente no. La capa de lógica de negocios debe tomar la decisión, la capa de UI debe hacer la redirección. La capa de negocios no debe saber nada acerca de HttpContext ni debería leer directamente las cookies. Pase la información relevante a la capa empresarial para que la capa empresarial pueda tomar la decisión y pase la decisión a la capa de IU para que pueda funcionar en la decisión resultante.
Esta es la razón ... ¿qué pasa si la capa de negocios se usa desde un servicio web? ¿Cómo puede la capa empresarial redirigir en esa instancia? ¿O supongo que se usa con un cliente no web? La redirección no tiene ningún significado en ese contexto. Si cambia su capa de interfaz de usuario, eso no debería afectar a su capa de lógica de negocios, y mezclar los redireccionamientos y la lectura de cookies en la capa de negocio requerirá eso con el diseño propuesto.
Depende de cómo definas tus capas; por ejemplo, mi "lógica comercial" generalmente está relacionada con el problema que estoy tratando de resolver, y no sabe nada de la interfaz de usuario. Por lo tanto, no puede hacer una redirección, ya que no tiene acceso a la solicitud / respuesta.
Personalmente, haría esto en la capa UI; tratar con las interacciones crudas, como ser guardián de puerta y guardián, es parte del trabajo de la capa de interfaz de usuario para una aplicación web. IMO. Por ejemplo, a través de un módulo http, que es (por definición) un componente de nivel de UI.
Diría que tienes razón para hacerlo en la lógica de negocios. La capa de presentación no debe tomar decisiones sobre el enrutamiento.