elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Patron MVC duda de implementación...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Patron MVC duda de implementación...  (Leído 3,496 veces)
digimikeh

Desconectado Desconectado

Mensajes: 191


Ver Perfil
Patron MVC duda de implementación...
« en: 14 Mayo 2019, 01:41 am »

Hola..

Tengo una duda con el patron de diseño MVC:

Entiendo que todo lo que se refiere a la visual esta en V (View)
Y todo lo que corresponda a la lógica está en C (Controller)
Lo que pertenece a base de datos en M (Model)

Pero no me imagino como pueda organizarse todo esto, aun no entiendo como se separa.. por ejemplo, un botón es una mezcla de V y C, porque no solo es algo visual sino que ejecuta una función, es decir es programación y visual... a menos que la programación de los botones no entre en la capa de Controller...  si es así, qué entra en esta capa?..

Saludos y gracias.


En línea

Dungeons & dragons;
dragons.Attack();
EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.159



Ver Perfil
Re: Patron MVC duda de implementación...
« Respuesta #1 en: 14 Mayo 2019, 03:25 am »

Saludos,

- Todo lo que el usuario mira o ve, va en Vista.

- Cuando se inicia una página web, esta debe iniciar desde el Controlador, el controlador prepara y llama a la vista correspondiente para que sea mostrada. Si esa vista tiene un botón con una función y dicha función es código backend (del lado del servidor) el botón llama al Controlador (función en el Controlador) y este controlador hace la tarea, luego prepara y muestra la vista correspondiente (puede ser la misma u otra).


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Patron MVC duda de implementación...
« Respuesta #2 en: 14 Mayo 2019, 20:01 pm »

...Pero no me imagino como pueda organizarse todo esto, aun no entiendo como se separa.. por ejemplo, un botón es una mezcla de V y C, porque no solo es algo visual sino que ejecuta una función...
En efecto, así es.

La separación clara solo es de cara a la teoría, en la práctica rara vez suele resultar así, por lo que simplemente hay que sacrificar alguna parte. En general para atenerse de algún modo, estricto, al patrón fuerza casi siempre a dar rodeos en ciertas partes, para lograr lo mismo (A llama a B, B llama a C, y luego C, representa algo en A... cuando directamente ese A, en vez de hacer la pertinente llamada, podría hacer la labor él mismo).

No obstante, al margen de la ineficiencia en la ejecución, suele buscarse la eficiencia en la implementación, al separarlo en partes distintas entre sí, si decides (por ejemplo) cambiar la vista (V), solo cambias esa parte, no necesitas tocar el resto, luego teóricamente resulta menos complejo y por ello más eficiente de abordar... también alejas problemas, si algo falla en la nueva implementación casi que queda claro, que será la implementación de la vista, luego no hay que repasar otras partes...

Es toda esa parte que 'no se ve' a simple vista, la que realmente le da sentido al patrón...
En línea

digimikeh

Desconectado Desconectado

Mensajes: 191


Ver Perfil
Re: Patron MVC duda de implementación...
« Respuesta #3 en: 18 Mayo 2019, 01:17 am »

Entiendo, gracias por las explicaciones...

Por ejemplo, hoy mismo me he encontrado con un caso particular, el rellenado de una tabla con datos de la base de datos..

la tabla es pertenece a una interfaz gráfica (V)
los datos se extraen de una ejecución de SQL.. (M)

Tengo la siguiente función:

Código
  1. int UnaClase::rellenarTabla() {
  2.  
  3.     //Conectar con base de datos
  4.     //ejecutar consulta SQL
  5.     //obtener datos y meterlos a la tabla (V)
  6.  
  7. }
  8.  

Como verán, aqui se mezcla los datos con la visual...
En que namespace o capa debe quedar esta función?

O quizá esté mal empleada la función...
Que tipo de datos se comparten entre capas?.. solo primitivos?, mi duda es esta ya que no me parece muy lógico dividir en capas y compartir tipos específicos de cada capa una con otra..

Disculpen tantas preguntas..

Gracias, saludos!11
En línea

Dungeons & dragons;
dragons.Attack();
EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.159



Ver Perfil
Re: Patron MVC duda de implementación...
« Respuesta #4 en: 18 Mayo 2019, 01:57 am »

- Poniéndolo simple, la Vista solo espera recibir data, esta data se la provee el Controlador, y el Controlador le pide Data de Base de Datos al Modelo y se la entrega a la Vista.

- Para tu ejemplo:

-- Controlador
---- Mostrar  al Usuario la Vista que contiene la estructura de una tabla
---- Solicitar datos de la Base de Datos al Modelo
---- Procesar los datos recibidos del Modelo y dárselos a la Vista

-- Modelo
---- Traer los datos solicitados por parte del Controlador y dárselos

-- Vista
---- Pedir al Controlador el contenido de la Tabla
---- Recibir el contenido de la Tabla y mostrarla

- La Vista solo debería de pedir y recibir datos, no debería de Procesar ningún dato.
- El Modelo interactúa con la Base de Datos usando sentencias SQL adecuadas e incluso puede procesar los valores devueltos por dichas sentencias SQL.
- El controlador Prepara, Limpia, Sanitiza, los datos que vienen de la Vista y las Procesa, de ser necesario solicita datos de la Base de Datos al Modelo y prepara estos datos devueltos para ser entregados a la Vista.
En línea

digimikeh

Desconectado Desconectado

Mensajes: 191


Ver Perfil
Re: Patron MVC duda de implementación...
« Respuesta #5 en: 20 Mayo 2019, 18:43 pm »

Ok, entonces la función rellenarTabla() en realidad no estaría bien verdad?, tendría que desglosarla.... ya que estaría mezclando dos capas en una sola función..

podría desglosarla así?:

Vista:
Código
  1.  
  2. //Incluyo la cabecera que manipula el controlador
  3. #include "Manager.h"
  4.  
  5. //suponiendo que tengo una variable que represente a la tabla y se llame
  6. //tbl_data
  7. void UMasterWindow::mostrarTabla(){
  8.     Controller::Manager manager;
  9.  
  10.     ui->tbl_data = manager.controlarTabla(tbl_data, "Usuarios");
  11.     ui->tbl_data->show();
  12. }
  13.  
  14.  
  15.  

Controlador:
Código
  1. //Incluyo la cabecera que manipula la visual de la tabla...
  2. #include "QTableView.h"
  3. #include "SQLManagement.h"
  4. #include "UMasterWindow.h"
  5.  
  6. QTableView Manager::controlarTabla(QTableView tbl_data, QString tbl_name){
  7.     Model::SQLManagement sqlM;
  8.  
  9.     QString queryCmd;
  10.     queryCmd = "SELECT * from " + tbl_name;
  11.     return sqlM.rellenarTabla(tbl_data, queryCmd);
  12.  
  13. }
  14.  

//Modelo:
Código
  1. #include "Manager.h"
  2. #include "QTableView.h"
  3.  
  4. QSqlQueryModel * model = nullptr;
  5.  
  6. QTableView SQLManagement::rellenarTabla(QTableView tbl_data, QString queryCmd){
  7.     model = new QSqlQueryModel;
  8.     QSqlQuery query;
  9.     query.exec(queryCmd);
  10.  
  11.     model->setQuery(queryCmd);
  12.     tbl_data->setModel(model);
  13.     cerrarBD();
  14.  
  15.     return tbl_data;
  16.  
  17. }
  18.  
  19. void SQLManagement::cerrarBD(){
  20.     delete db;
  21.     db = nullptr;
  22. }
  23.  
  24.  

Es asi como lo imagino, no se si estará bien... 
Me recomiendan un buen curso de MVC?.. necesito ver en la practica con el código como funciona, porque el ejemplo que acabo de poner me parece una espagueti...

Saludos y gracias!
En línea

Dungeons & dragons;
dragons.Attack();
Daghdha

Desconectado Desconectado

Mensajes: 11


Nice to meet me


Ver Perfil
Re: Patron MVC duda de implementación...
« Respuesta #6 en: 29 Mayo 2019, 19:31 pm »

Si hablamos de una aplicación web, hay que intentar separar el frontend del backend como si de dos proyectos diferentes se tratase.
Al aplicar el patrón de diseño MVC, y ciñéndonos solo al backend, podemos separarlo en tres partes independientes.

El controlador es el encargado de tramitar todas las peticiones que nos llegan desde el frontend. Si el usuario hace click en un botón de login, el controlador es el encargado de recibir los datos pertinentes y pasárselos al modelo pertinente.

El modelo se encarga de recibirlos, comprobar o solicitar lo que se desee en la base de datos, y devolverlo. No debería tratarlos ni hacer operaciones con ellos, para eso está el controlador.

La vista se ocupa de recibir los datos resultantes, y de seleccionar el formato de estos para ser recibidos por el frontend (JSON, XML, CSV...)

Ahora bien, en otras aplicaciones, de escritorio por ejemplo, la vista es en si misma lo que se muestra por pantalla, así que de esta depende también la interacción del usuario con los componentes y de mostrar los datos que le llegan desde el controlador.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con implementación de clases de UML a C++
Programación C/C++
novalida 2 3,110 Último mensaje 23 Septiembre 2011, 22:16 pm
por novalida
Duda patrón Singleton
Desarrollo Web
flash-back 0 1,918 Último mensaje 11 Febrero 2013, 16:37 pm
por flash-back
duda sobre patron de expresion regular
Programación General
MagnusIvanovich 5 3,447 Último mensaje 14 Marzo 2013, 20:11 pm
por 1mpuls0
Duda sobre el patrón MVC
Programación General
Developer Diego 2 2,360 Último mensaje 20 Junio 2014, 00:25 am
por JorgeEMX
Duda con implementacion mvc
PHP
d91 0 2,286 Último mensaje 16 Agosto 2016, 15:25 pm
por d91
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines