Entrevista MVC preguntas y respuestas

Que es MVC?

MVC es un patrón de programación que esta dividido en tres capas, El Modelo, La Vista, y El Controlador. A continuación la función principal de cada uno
  • La “Vista” es responsable del aspecto visual.
  • El “Modelo” representa el mundo real a partir de objetos que son pasados a la vista.
  • El “Controlador” es responsable de tomar la petición del usuario y cargar la correspondiente Vista y Modelo.
Puedes explicar el flujo completo de MVC?
A continuación el flujo en MVC (Modelo-Vista-Controlador) Arquitectura
  • El usuario realiza el request al controlador.
  • El controlador dependiendo del request, decide que modelo cargar, El controlador carga el modelo y adjunta el modelo a la vista apropiada.
  • Al final la vista con el modelo de datos envía el request al usuario final al navegador.
MVC es apropiado para aplicaciones windows y web?
La arquitectura MVC es apropiada tanto para aplicaciones web como para aplicaciones Windows, pero para aplicaciones Windows es mas recomendable utilizar patrones como MVP Modelo Vista presentación o el patron MVVM.
Cual es el beneficio de utilizar MVC?

Existen dos grandes beneficios
  • Separar la lógica de programación en clases separada, permite reutilizar el código.
  • Las pruebas unitarias ahora son posibles de realizar mas fácilmente.
MVC es diferente a una arquitectura de 3 capas?
MVC es la evolución de la arquitectura de 3 capas tradicional, muchos componentes de la arquitectura de 3 capas es parte de MVC. En el cuadro se explica las semejanzas.
Funcionalidad Modelo 3 Capas Arquitectura Modelo Vista Controlador Arquitectura
Aspecto visual Interface de Usuario Vista
Logica Presentacion Interface de Usuario Controlador
Logica de Negocio / Validaciones logica de negocios Modelo
Request es enviado primero Interface de Usuario Controlador
Acceso a datos Capa de Acceso a Datos Capa de Acceso a Datos
Cual es la ultima versión de MVC?
Al momento de escribir este articulo han sido lanzados 6 versiones de MVC(1-2-3-4-5-6)
Cual es la diferencia entre cada versión de MVC?
MVC 2 MVC 3 MVC 4
validacion cliente servidor
plantilla de ayudas
areas
controladores asíncronos

Html.ValidationSummary Helper Method
DefaultValueAttribute in Action-Method
Parameters
Binding Binary Data with Model Binders
DataAnnotations Attributes
Model-Validator Providers
New RequireHttpsAttribute Action Filter
Templated Helpers
Display Model-Level Errors
Razor
proyecto listo para hacer
templates
Html5 habilitado en templates
soporte para multiview engines
javascript y ajax
validacion del modelo
mejoras
Asp.Net Web API
actualizada defaul
project templates
nuevos templates para proyectos mobiles
mejoras para soportar aplicaciones mobiles
soporte para metodos asincronos
Que es routing en MVC?
Routing te ayuda a definir la estructura de la URL y encontrar por medio de la url el controlador.
Donde se escribe y define el route mapping?
El código del route mapping se escribe en el archivo global.asax.
Se pueden mapear múltiples URL’s a la misma acción?
Si se puede, sólo tiene que hacer dos entradas con diferentes nombres clave y especificar el mismo controlador y acción.
Como puedo navegar desde una vista a otra vista usando hipervinculos?
Usando el método “ActionLink” mostrado a continuación.
El código abajo crea una simple URL que navega al Controlador Home e invoca la acción “GotoHome”
<%= Html.ActionLink(“Home”,”Gotohome”) %>
Como puedo restringir las acciones para invocar solo peticiones GET o POST?
Podemos decorar la acción MVC con el atributo “HttpGet” o “HttpPost” al adicionar este atributo la petición solo se puede invocar el tipo de petición solicitada. 
[HttpGet]
public ViewResult DisplayCustomer(int id)
{
   Customer objCustomer = Customers[id];
   return View(“DisplayCustomer”,objCustomer);
}
Como puedo manipulas sesiones en MVC?
Las sesiones pueden utilizarse de tres maneras tempdata, viewdata y viewbag
Cual es la diferencia entre tempdata, viewdata, y viewbag?
  • tempdata: nos ayuda a mantener los datos cuando estamos moviéndonos entre un controlador y otro, entre una acción  y otra, en otras palabras cuando tu redireccionas “tempdata” ayuda a mantener los datos entre redirecciones.
  • View data: ayuda a mantener los datos cuando te mueves entre la vista y el controlador.
  • View Vag: es usado en la vista y puede tener múltiples view data en el.
  • Session variables: para mantener variables de se sesiones entre una entidad y otra.
  • Hiddend fields and HTML controls:  ayuda a mantener datos entre la interface de usuario y el controlador, se pueden enviar datos a los controles html o hidden fields al controlador usando POST o GET metodos.
A continuación una tabla que muestra la diferencia
Mantiene datos entre ViewData/ViewBag TempData Hidden fields Session
Controlador a Controlador NO SI NO SI
Controlador a Vista SI NO NO SI
Vista a Controlador NO NO SI SI
Que son las vistas parciales en MVC?
Las vistas parciales son unas vistas reutilizables (como los controles de usuario) que pueden ser embebidas dentro de otra vista. Por ejemplo tú pagina tiene un menú un encabezado y un pie de pagina, para cada pagina tu puedes reutilizar el menú, el encabezado y el pie de pagina por ende se pueden crear vistas parciales para cada uno de estos elementos y llamarlos en la vista principal.
Como creo una vista parcial y como la utilizo?
cuando en el proyecto creamos una vista, seleccionamos el check box Create partial view.
Una vez creada la vista parcial se llama en la vista principal usando “Html.RenderPartial” de la siguiente manera.
<% Html.RenderPartial("MiVista")%>
Como puedo hacer validaciones en MVC?
una de las maneras fáciles para realizar validaciones en MVC es usando anotaciones de datos, las anotaciones de datos son aplicados en las propiedades del modelo, por Ejemplo en el siguiente “código” tenemos que la clase cliente con la propiedad “codigocliente”.
Esta propiedad “codigocliente” es precedida por una anotación requerido, con esto el dato sera requerido y validado.
public class Customer
{
[Required(ErrorMessage="Customer code is required")]

public string CustomerCode{set;get;}

}

Para desplegar el mensaje de error se usa el método “ValidateMessageFor” precedido del “Html” helper class
<% using (Html.BeginForm(“PostCustomer”, “Home”, FormMethod.Post))
{ %>
<%=Html.TextBoxFor(m => m.CustomerCode)%>
<%=Html.ValidationMessageFor(m => m.CustomerCode)%>
type=”submit” value=”Submit customer data” />
<%}%>
 
después en el controlador podemos verificar si el modelo es valido y tomar acciones en el controlador. 
public ActionResult PostCustomer(Customer obj)
{
   if (ModelState.IsValid)
   {
   obj.Save();
   return View(“Thanks”);
   }
   else
   {
   return View(“Customer”);
   }
}
 
Podemos desplegar todos los errores en un solo lugar?
Si se puede utilizar el método “ValidationSummary”
<%= Html.ValidationSummary() %>
 
Cual es el otro atributo de anotacion para validacion en MVC?
Si tu quiere verificar el tamaño puede utilizar “StringLength”
[StringLength(160)]
public string FirstName { get; set; }
 
Si quiere usar una expresión regular puede utilizar “RegularExpression” 
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]
public string Email { get; set; }
 
Si quiere verificar que un numero se encuentre en un rango, puede utilizar “Range”
[Range(10,25)]
public int Age { get; set; }
 
Algunas veces usted quiere comparar el valor de una campo con otro campo, se puede utilizar “Compare”
public string Password { get; set; }
[Compare(“Password”)]
public string ConfirmPass { get; set; }
 
En caso de querer colocar un error en particular usted puede utilizar “Error” collection
var ErrMessage = ModelState[“Email”].Errors[0].ErrorMessage;
 
En caso de que usted mismo realice el modelo de la clase puede utilizar “TryUpdateModel” para verificar si el objeto es valido o no.
TryUpdateModel(NewCustomer);
 
En caso de querer adicionar errores en el controlador puede adicionar “AddmodelError”
ModelState.AddModelError(“FirstName”, “This is my server-side error.”);
 
Como puedo habilitar data anotation validation en el cliente?
En dos pasos primero adicionando las referencias necesarias. 

type=”text/javascript”>

Segundo llamando “EnableClientValidation”
<% Html.EnableClientValidation(); %>
 
Que es Razor MVC?
Es un motor de vista el peso ligero. Hasta MVC sólo teníamos un tipo de vista ieASPX, Razor fue introducido en MVC 3.
 
Por que Razor si ya teniamos ASPX?
Razor es limpio, ligero y la sintaxis es simple a comparación de ASPX por ejemplo para desplegar el tiempo en ASPX se necesita escribir
<%=DateTime.Now%>
En Razor
 
Pero cual es mejor Razor o ASPX?
De acuerdo a Microsoft es Mejor Razor por ser mas liviano y tener una sintaxis mas simple, para los que llevamos tiempo con ASPX la respuesta es ambigua. 
 
Como puede implementar la autenticacion y autorización en MVC?
Se puede utilizar la autenticacion de windows o la autenticacion de formulario en MVC. 
Como implemento la autenticacion de windows en MVC?
para la autenticacion de windows se necesita modificar el web.config
mode=”Windows”/>
<authorization>
    users=”?”/>
</authorization>
Despues en el controlador en la accion que usted use para autorizar especifica que usuarios tienen acceso a ese controlador. 
[Authorize(Users= @”WIN-3LI600MWLQN\Administrator”)]
public class StartController : Controller
{
//
// GET: /Start/
[Authorize(Users = @”WIN-3LI600MWLQN\Administrator”)]
public ActionResult Index()
{ return View(“MyView”);}
}
 
Como implementar la autenticacion de formulario en MVC?
Para la implementacion se realiza de la misma manera que en ASP.Net, primero se configura el modo de autenticacion de formulario en el web.config 
 
mode=”Forms”>
   loginUrl=”~/Home/Login” timeout=”2880″/>
</authentication>
 
Despues en el controlador utilizamos la accion “Authorize” el atributo que especifica que usuarios tienen acceso a ese controlador. solo los usuario sespecificados en el controlador pueden tener acceso al mismo. 
 
[Authorize(Users= @”WIN-3LI600MWLQN\Administrator”)]
public class StartController : Controller
{
//
// GET: /Start/
[Authorize(Users = @”WIN-3LI600MWLQN\Administrator”)]
public ActionResult Index()
{ return View(“MyView”);}
}
 
Como implemento la autenticacion de formulario en MVC?
La autenticacion de formulario es implementada de la misma manera que en ASP.Net. El primer paso es configurar el modo de autenticacion del formulario. La direccion de login apunta al controlador.
 
mode=”Forms”>
loginUrl=”~/Home/Login” timeout=”2880″/>
</authentication>
 
después se crea el controlador donde se verifica el correspondiente usuario  y se toman las acciones correspondientes, si el usuario esta se procede a almacenar el valor en la cookies. 
 
public ActionResult Login()
{
if ((Request.Form[“txtUserName”] == “Shiv”) && (Request.Form[“txtPassword”]== “Shiv@123”))
{
FormsAuthentication.SetAuthCookie(“Shiv”,true);
return View(“About”);
}
else
{ return View(“Index”);}
}
 
Todas las otras acciones necesitan están precedidas con el atributo “Authorize” de lo contrario los usuarios no autenticados serán redireccionados a la pagina de login. 
 
[Authorize]
PublicActionResult Default()
{return View();}
[Authorize]
publicActionResult About()
{ return View(); }
 
Como hacer para implementar Ajax en MVC
Se puede implementar ajax de dos maneras
  • Librerias de Ajax
  • jQuery
Implementando Ajax en MVC?
Si quiere crear un llamado asíncrono por nombre “GetData” que traiga la “GetDate” función del controlador. una vez el controlador responda los datos se mostraran en el DIV llamado “DateDiv”
 
DateDiv” />
<%: Ajax.ActionLink(“Get Date”,”GetDate”, new AjaxOptions {UpdateTargetId = “DateDiv” }) %>
A continuacion se puede ver como el controlador “GetDate” tiene una pausa de 10 segundos
public class Default1Controller : Controller
{
public string GetDate()
{
Thread.Sleep(10000);
return DateTime.Now.ToString(); }
}
La segunda manera de hacer un llamadoAjax enmvc es usandojQuary. en el siguiente código sehace una peticiónajaxPOST a laURL “/MyAjax/getCustomer”. esto se realiza usando “$.post” toda la lógica es puesta en una función llamada “GetData” ya el llamado de esta función se puede hacer desde un botón ohiperlinkfunction GetData()
{
var url = “/MyAjax/getCustomer”;
$.post(url, function (data)
{ $(“#txtCustomerCode”).val(data.CustomerCode);
$(“#txtCustomerName”).val(data.CustomerName);
})}
Que tipo de eventos pueden ser seguidos en ajax?
Onsuccess, OnFailure, OnComplete, Onbegin
Cual es la diferencia entre “ActionResult” y “ViewResult”?
“ActionResult” es una clase abstracta mientras “ViewResult” deriva de la clase “ActionResult”, de “ActionResult” también derivan clases como “JasonResult” y “FileStreamResult”
“ActionResult” puede ser usada dinamicamente. si esta tratando de retornar diferentes tipos de vistas “ActionResult” es la mejor opción,  por ejemplo en el siguiente codigo se puede ver como la acción llamada “DynamicView” retorna un ViewResult o un JsonResult
public ActionResult DynamicView()
{
if (IsHtmlView)
return View(); // returns simple ViewResult
else
return Json(); // returns JsonResult view
}
Cuales son los diferentes tipos de resultados en MVC?
“Nota: es difícil recordar los 12 tipos. pero se recomienda tener muy en cuenta los principales 3 que son ActionResult, ViewResult, JsonResult”
Estos 12 tipos de resultados en MVC derivan de la clase principal “ActionResult”
  1. ViewResult – renderiza una vista especifica a la respuesta.
  2. PartialViewResult – Renderiza una vista parcial especifica a la respuesta.
  3. EmtyResult – Una respuesta vacía es retornada.
  4. RedirectResult – Redirecciona a una dirección especifica.
  5. RedirectToRouteResult – redirecciona a una dirección especificada y determinada por el routing engine.
  6. JsonResult – Serializa un objeto ViewData a un objeto en formato JSON.
  7. JavaScriptResult – Retorna un codigo javascript que puede ser ejecutado en el cliente.
  8. ContentResult – Escribe contenido a la respuesta sin que requiera una vista de respuesta.
  9. FileContentResult – Retorna un archivo al cliente.
  10. FileStreamResult – Retorna un archivo al cliente. de una fuente Stream.
  11. FilePathResult – Retorna un archivo al cliente.
Que son “ActionFilters” en MVC?
Ayudan ha mejorar la lógica mientras las acciones de MVC son ejecutadas o después que una acción en MVC a sido ejecutada.
Son usadas en los siguientes escenarios.
  1. Implementar procesos lógicos después de una acción.
  2. cancelar una ejecución concurrente.
  3. verificar el valor devuelto.
  4. proveer datos adicionales a la acción.

Este documento es mi primera traduccion del articulo original publicado en codeproject.

El articulo original fue publicado lo pueden encontrar AQUI yo solo me tome la tarea de traducirlo a español y publicarlo en mi blog.

El articulo Original en Ingles lo pueden descargar  MVC Interview Questions

Anuncios