Ayuda con MVC
Sáquenme de dudas, por ejemplo al hacer un programa con mvc, pues la vista envía los mensajes al controlador para que este a su vez envíe el mensaje al modelo, entonces en el modelo va la lógica de la aplicación, en el controlador es el puente entre la vista y el modelo, y ps el modelo sólo recibe las acciones hechas por el usuario y da las respuestas respectivas, mi pregunta es la seguiente:
Al realizar una aplicación de escritorio por ejemplo: un login, la persona escribe su usuario y contraseña respectiva, y este viaja al controlador el cuál pedirá al modelo si es correcta o no, pues donde redacto los mensajes que se le regresarán al usuario, por ejemplo contraseña incorrecta, lo redacto en el modelo, controlador o en la vista, me podrín explicar porfavor.
Otra consulta:
Al hacer las validaciones por ejemplo de números, creo en el modelo una clase validadora, el cuál lo llamo en el controlador?, o simplemente lo valido en el modelo, el cuál ps para el ejemplo del login, cuando ingrese la contraseña incorrecta desde el modelo con un método retorne un String con el mensaje.
Si fueran tan amables en responderme y si es con un ejemplo básico sería mejor, gracias.
- Inicie sesión o regístrese para enviar comentarios
Implementacion MVC
No pierdas el enfoque del MVC, separar responsabilidades y facilitar el mantenimiento. En una aplicación Swing puede implementarse como:
Modelo
----------------------
class Login {
private string pass;
private string user;
//geters y setters
}
class LoginResult{
boolean state;
String msg;
//getter setter
}
class LoginValidator {
public LoginResult validate(Login login){
//regla de negocio
}
}
Vista
-------------------------------------
interface LoginView {
public String getUser();
public String getPass();
public void printLoginResult(String msg);
}
class LoginViewPanel exteds JPanel implements LoginVIew {
//instanciar componentes gui
//agregar el controlador como escucha
public void addListener(Action Listener){
}
}
Controlador
-----------------------
class LoginController implements ActionListener {
public LoginController(LoginValidator validator, LoginVIew view){
}
//evento boton loguin
public void actionPerformer(Event event){
String user = view.getUser();
String pass = view.getPass();
Login login = new Login(user, pass);
LoginResult result = validator.validate(login);
if(result.getState() == failed){
view.printResult(result.getMessage());
}
}
}
Mi interpretación
Como yo lo veo es así: en las tres partes hay lógica, pero la separación de funciones es importante.
¿Cuál es la finalidad de esto? Pues es sencillo: cuando escribas tus componentes de la capa de modelo, enfócate en lo que tienen que hacer, pero de manera abstracta: almacenar los datos, realizar algunas consultas, etc.
Cuando escribas tus controladores, ahí pones la lógica de negocio, y seguramente van a necesitar usar los componentes de la capa de modelo, pero sin preocuparse de cómo se almacenan los datos. Aquí sirve por ejemplo preguntarse si el componente puede ser utilizado tanto en una aplicación web como en una aplicación de escritorio, o en un servicio REST/SOAP-RPC/HTTP-RPC/etc.
Cuando escribas tus componentes de vista, debes de enfocarte únicamente en la presentación de datos y en poder avisarle a la capa de control de los cambios realizados a los datos, y de obtener datos nuevos que presentar. Aquí es donde manejas los eventos del usuario, etc.
¿Cómo vas a manejar la comunicación entre capas? Utiliza interfaces. Esto te permite cambiar una implementación por otra: Puedes cambiar los modelos que utilizan una base de datos relacional por modelos que usan persistencia NoSQL o lo que sea. De igual manera, puedes reutilizar los controladores en una aplicación web y en una aplicación de escritorio. Si hay comunicación de los controladores hacia la vista, es por interfaces, de modo que no hay acoplamiento con una vista específica (por ejemplo web).