Soy nuevo en MVC/MVP y lo aprendemos creando una aplicación Winform.validaciones en MVC/MVP
He creado hasta cierto punto los Modelos, Presentadores y Vistas ... Ahora, ¿dónde encajan mis validaciones?
Creo que la validación de tipo de datos inicial (como solo los números en el campo Edad), debe hacerse por vista. Mientras que las otras validaciones (como si la edad está dentro de 200) debe hacerse por modelo.
En cuanto a la validación de tipo de datos, mi punto de vista expone los valores como propiedades
public int? Age
{
get
{
int val;
if (Int32.TryParse(TbxAge.Text, out val))
{
return val;
}
return null;
}
set
{
TbxAge.Text = value;
}
}
puedo realizar la validación por separado, pero no como me informo presentador que la validación aún está pendiente, cuando se trata de acceder a la Edad de la propiedad?. Particularmente cuando el campo es opcional.
Es bueno emitir una excepción de validación, pero luego el presentador debe atraparla en cada punto.
Entiendo correctamente, o me falta algo.
Actualización (en aras de la claridad): En este caso simple donde el campo de edad es opcional, ¿qué debo hacer cuando el usuario escribe su nombre en lugar de un número. No puedo pasar el nulo ya que eso significa que el campo ha quedado vacío por el usuario. Entonces, ¿cómo informo al presentador que se han ingresado datos no válidos ...
Debo añadir que lo que intenta hacer es posible, pero se siente mal. Sin embargo, si estás en desventaja con este enfoque, necesitarías usar eventos para propagar fallas de validación a la aplicación. Usar el enfoque "tonto" desacoplado que mencioné proporciona una aplicación más simplista en general. – Finglas
Bien ... Si está diciendo que debería hacer la validación del tipo de datos en Presenter ... Entonces, ¿deberían mis vistas exponer todos los valores como propiedad de cadena, que el controlador podría leer y validar? –
No todo como cadenas. Usa tipos primitivos para empezar. Toma tu ejemplo de edad. Un int es un int si es o no su WinForms o ASP.NET MVC. Ambos son C#. Siempre puede factorizar estas primitivas después en clases de valores personalizados como PersonalDetails (en qué edad se almacenaría). Estas clases de valor se usarían entonces como su 'ViewModel'. Lo que no quiere hacer con el patrón MVP/MVC son los tipos de devolución específicos de su vista. Las corrientes HTML E.g no funcionarían en una aplicación de WinForms, pero una cadena/tipo personalizado que representa un fragmento de texto sería universal. – Finglas