You are on page 1of 6

21/4/2017 CoDejaVu:EjemploModeloVistaControlador

Inicio AcercaDe... QueesCoDejaVu? IndicedeContenido VideoTutorialesCoDejaVu VideoTutorialesAndroid

lunes,17dejuniode2013 Buscaresteblog

Ejemplo Modelo Vista Controlador Buscar

En la entrada sobre patrones de Diseo se habla sobre Contacto


el patrn MVC, en esta oportunidad vamos explicar un ejemplo
practico donde se aplica este modelo mostrando la forma de CristianHenao
Seguir 1.200
independizar los componentes de nuestro sistema, adems lo
combinaremos con los patrones DAO y VO para facilitar el Ingenierode
manejodelainformacin. Sistemasy
Computacin(Universidaddel
Por cuestiones de tamao no vamos a hacer la aplicacin paso a paso, pero si se Quindo)
explicar la lgica de la misma, al final se presenta una opcin de descarga TecnlogoenAnlisisy
DesarrollodelosSistemasde
delcdigofuentedondeveremoslaaplicacinenfuncionamiento.
Informacin(SenaQuindo).

Elproblema. Blog:
http://codejavu.blogspot.com/
Se solicita desarrollar un sistema de administracin de usuarios con un CRUD Facebook:
(Create, Read, Update, Delete) bsico nos advierten que la aplicacin es un https://www.facebook.com/
prototipoinicialelcualestapropensoacambios,puesannosetienendefinidaslas codejavu
ventanasconlasquesevaatrabajarnilainformacinrequerida,porlemomento Google+:
se trabajar con una BD MySql, pero posiblemente se tenga que migrar a otro https://plus.google.com/+
CodejavuBlogspotColombia/
sistemagestor....
youtube:http://goo.gl/IiPNSy
Twitter:@chenaooo
Lasolucin. Linkedin:
http://www.linkedin.com/pub/
Se aplica el MVC permitiendo independizar la lgica y la parte visual del sistema cristiandavidhenaohoyos/69/
usandoparaesouncontroladorqueadministralosprocesossirviendocomopuente b90/84a
entreestos. Vertodomiperfil

paralaBDseusaMySql,reutilizandolaBDcreadaenelejemplodeconexincon
Java,elScritpeselsiguiente.

1 CREATEDATABASE/*!32312IFNOTEXISTS*/`codejavu`/*!40100DEFAULTCHARACTER
2
3 USE`codejavu`;
4
5 /*Tablestructurefortable`persona`*/
6
7 DROPTABLEIFEXISTS`persona`;
8
9 CREATETABLE`persona`(
10 `id`int(10)NOTNULL,
11 `nombre`varchar(30)defaultNULL,
12 `edad`int(3)defaultNULL,
13 `profesion`varchar(30)defaultNULL,
14 `telefono`decimal(10,0)defaultNULL,
15 PRIMARYKEY(`id`)
16 )ENGINE=InnoDBDEFAULTCHARSET=latin1; Suscribete!!!Quieresseguir
17 esteblog?Participaenelsitio
18 /*Dataforthetable`persona`*/

De esta forma se crea la Base de Datos a la que se va a apuntar, la cual contiene


solounatablaPersonaconlaqueserealizantodaslasoperacionesCRUD.

Laagrupacindeclasesdenuestrosistemaes:

http://codejavu.blogspot.com/2013/06/ejemplomodelovistacontrolador.html 1/22
21/4/2017 CoDejaVu:EjemploModeloVistaControlador
Seguidores(176)Siguiente

Seguir

124

Sehaproducidounerroreneste
gadget.
Como vemos tenemos la parte visual compuesta por las clases VentanaPrincipal,
VentanaRegistro,VentanaBuscar,lalgicadenegocioseestableceenelmodelo
elcualsecomponeporlaclaseLogicayConexinyaplicamoslospatronesDAOy ContactosG+
VOpormediodelasclasesPersonaDaoyPersonaVoy por ultimo el controlador CristianHenao
sedefineenlaclaseCoordinador,encargadadeestablecertodaslasrelacionesdel
Aadiracrculos
sistema, la clase Principal prepara las instancias iniciales del sistema y
posteriormenteloejecuta.

VeamoscomofuncionaelPatrn:

ElModelo.

Como se mencion, en el modelo tenemos la lgica de negocio, sern todas las


clases vinculadas con el CRUD a nivel interno, que en ultimas es en lo que gira
nuestrosistema.
1.200metienenensuscrculos. Vertodo

ClaseLogica.
HistorialCoDejaVu
Estaclasepermiterealizarlasoperacionesasociadasalalgicade
negociocomotal,desdeellarealizamoslasvalidacionesyllamados 2017(4)
alasoperacionesCRUDdelsistema. 2016(4)

2015(4)
En caso de que se requieran procesos adicionales asociados a
la lgica de negocio, aqu ser donde se creen los mtodos para 2014(17)

dichos procesos, por ejemplo el mtodo validarRegistro 2013(59)


determinasilosdatossoncorrectosypermiteregistrarlapersona diciembre(2)
enelDao.
noviembre(2)
octubre(4)
1 publicvoidvalidarRegistro(PersonaVomiPersona){
2 PersonaDaomiPersonaDao; septiembre(4)
3 /*Validaquesoloseingresenidde3digitos*/ agosto(4)
4 if(miPersona.getIdPersona()>99){
5 miPersonaDao=newPersonaDao(); julio(3)
6 miPersonaDao.registrarPersona(miPersona);
7 }else{ junio(8)
8 JOptionPane.showMessageDialog(null,"Eldocumentodelapersonadebe" EjemploPatronDelegate
9 "sermasde3digitos","Advertencia",JOptionPane.WARNING_MESSAGE);
10 } EjemploPatrnObserver
11 } EjemploModeloVista
Controlador
QuesonlosPatronesde
Diseo?

ClaseConexin. PremioLiebsterAward
EjemploConectandoJava
En esta clase tenemos la cadena de conexin con la que trabajar conMySql
nuestra aplicacin, en ella se define la base de datos, el usuario, ManejodeExcepcionesen
password y driver de conexin, si por ejemplo en un futuro se nos Java
pide conectarnos a una base de datos diferente o establecer un EjemplodePolimorfismoEn
sistema gestor distinto (pero con la misma estructura de tablas y Java
campos), tan solo modificaremos esta clase y dicho cambio sera
transparenteparaelrestodelsistema. mayo(18)
(Tener en cuenta que los datos de login y password corresponden a abril(14)
losqueyodejpordefectoalinstalarMySql,esdecirloginrootysincontrasea)

1 publicConexion(){ Categorias
2 try{
http://codejavu.blogspot.com/2013/06/ejemplomodelovistacontrolador.html 2/22
21/4/2017 CoDejaVu:EjemploModeloVistaControlador
2 try{ Abstract (2) Abstract Factory
3 //obtenemoseldriverdeparamysql Adapter (2) Apache Ant
4 Class.forName("com.mysql.jdbc.Driver"); continuousintegration(6) control
5 //obtenemoslaconexin
6 conn=DriverManager.getConnection(url,login,password); de versiones (3) Eclipse (14)
7 Excepciones (1) google code
8 if(conn!=null){ Herencia (4) Integracin
9 System.out.println("Coneccinabasededatos"+bd+"OK"); continua (6) Interface (3) java
10 }
11 } (17) Java Swing (26)
12 catch(SQLExceptione){ jboss (4) jboss seam (3) Jboss
13 System.out.println(e); Tools (2) JDialog (3) JDK
14 }catch(ClassNotFoundExceptione){ Jenkins(7) JSF(3)MVC(3) MySql
15 System.out.println(e);
(2) Observer (2) Patrones de
16 }catch(Exceptione){
17 System.out.println(e); Diseo (8) PerGem space
18 } Plugin (3) Polimorfismo
19 } Programacin Orientada a
Objetos(7)Properties(1) repositorio
(3) seam gen (1) Singleton (2) svn
(5)

ClasePersonaVo.
LoMasVisto

Al utilizar este tipo de clases, aplicamos el patrn Value


ConceptosBsicosde
Object o VO (Anteriormente conocidas como DTO Data Programacin
Transfer Object) en el que representamos las entidades OrientadaaObjetos
(Tablas) de la base de datos, la tabla persona tiene los Enestaentrada
campos id, nombre, edad, profesin telfono entonces veremosalgunosconceptosde
laprogramacinorientadaa
nuestra clase Vo tendr estos mismos atributos y de esta Objetos
manera podremos transportar un objeto persona con todos (POO)....................................
estos valores por medio de los mtodos set y get de cada ...........Muc...
atributo.
EjemploModelo
VistaControlador
Este patrn nos facilita enormemente el transporte de la Enlaentradasobre
informacin, evitando que se enven gran cantidad patronesdeDiseo
de parmetros a un mtodo cuando queremos hacer un sehablasobre
elpatrnMVC,enesta
registro o actualizacin, tambin en caso de que se modifique la tabla de la BD, oportunidadvamosexplicarun
nuestra clase deber ser modificada as como los mtodos que obtienen la ejemplopracticodondese
informacin,masnolosmtodosquelatransportan. apl...

Eclipseo
1 /** Netbeans?
2 *@returntheidPersona Hola,enesta
3 */ oportunidadquiero
4 publicIntegergetIdPersona(){ hacerunbreaken
5 returnidPersona; lasentradassobreJava
6 } Swing..........................Y
7 /** Porqu?...........porquea...
8 *@paramidPersonatheidPersonatoset
9 */ Ejemplo
10 publicvoidsetIdPersona(IntegeridPersona){ JFileChooser
11 this.idPersona=idPersona; Nuevamente
12 } regresoconun
ejemploprctico
sobreunodeloscomponentes
ClasePersonaDao. JavaSwing..............eldade
hoylestraigoelJFileChooser
...
Cuando utilizamos estas clases, aplicamos el patrn Data Access
ObjectoDAO,bsicamenteestepatrnconsisteencentralizarlos Ejemplode
procesos de acceso a la base de datos evitando inconsistencias y PolimorfismoEn
Java
posibles problemticas cuando esto se realiza a lo largo de la
Enestaentrada
aplicacin. vamosatrabajar
Conestepatrnindependizamoslalgicadenegociodelalgicade unejemplorpidoysimple
accesoadatosobteniendomayororganizacinyflexibilidadenelsistema. aplicandoelconceptode
Polimorfismo,enelpost
anteriorvimosalgunasconsi...
1 publicvoideliminarPersona(Stringcodigo)
2 { Comocrear
3 Conexionconex=newConexion(); InterfacesGraficas
4 try{ enEclipsecon
5 Statementestatuto=conex.getConnection().createStatement(); WindowBuilder
6 estatuto.executeUpdate("DELETEFROMpersonaWHEREid='"+codigo+"'"); Despusdemucho
7 JOptionPane.showMessageDialog(null,"SehaEliminado"+ meditarlo,voyaexplicarles
8 "Correctamente","Informacin",JOptionPane.INFORMATION_MESSAGE); cmocrearaplicacionescon
9 estatuto.close(); interfazgrficadesdeEclipse,
10 conex.desconectar(); similaracomosehaceen...
11
12 }catch(SQLExceptione){
http://codejavu.blogspot.com/2013/06/ejemplomodelovistacontrolador.html 3/22
21/4/2017 CoDejaVu:EjemploModeloVistaControlador
12 }catch(SQLExceptione){
13 System.out.println(e.getMessage()); Ejemplo
14 JOptionPane.showMessageDialog(null,"NoseElimino"); ConectandoJava
15 } conMySql
16 } Enestaentrada
vamosatocaruno
delospuntosfundamentales
eneldesarrollodesoftware,
novamosaentrarendetalles
LaVista. dequeesunaB...

Ejemplo
Aqu se define la parte visual del sistema, en la vista estableceremos todas las
JOptionPane
ventanasointerfacesgrficasdeusuario,mediantelascualesrepresentamostodoel Nuevamente
modelopermitiendolainteraccinentrelaaplicacinyelcliente. despusdeotra
semanamuy
ClaseVentanaPrincipal. pesadasinpoderdarlevuelta
alBlog,regresoparafinalizar
lasecuenciadeentradassobre
JavaSwi...

Comparando
FechasEnJava
Enestaentrada
veremosunodelos
procesosobligados
cuandosetrabajaeneste
campodeldesarrollode
Software,sinimportarel
lenguajeq...

EjemploEventos
delTecladoenJava
Enlaentrada
Estaclaserepresentalaventanainicialdelaaplicacin,poseeunreadetextocon
anteriortocamosel
una pequea descripcin y 2 botones que darn inicio a los eventos principales del temadelos
sistema. eventosdelMouse,enesta
ocasincontinuaremos
trabajandoconEventospero
secomunicaconelmodelomediantelaclasecoordinadorydesdeestasecarganlas ahoradelTecla...
otrasventanasdelaaplicacin.

ClaseVentanaRegistro. CoDejaVu!!!

CoDejaVu no es mas que la idea de


aportar un poco de conocimiento y
colaboracin a los que lo puedan
necesitar,yretribuirunpocodeloque
he podido aprender...........no espero
que muchos sigan mis Entradas, o
dejen comentarios, solo espero que
esto pueda ser de utilidad para
alguien.........ysilesirveaalguienmas
porquenocompartirlo?

PermiteelingresodeinformacinalaBD,enellaseevidenciantodosloscamposde Enlaces
la tabla Persona y presenta un medio grfico para las clases PersonaVo y
PersonaDao, al ejecutar el evento de registro se establece comunicacin entre el Paperblog
coordinador y la clase Lgica donde se encuentran todas las validaciones y casos Hace5das

paraelingresodeinformacin.

ClaseVentanaBuscar.

Esta clase permite realizar las operaciones de Consulta, Actualizacin y eliminacin


delatablaPersona,igualquelaanteriorrepresentalapartevisualdelmodeloyse

http://codejavu.blogspot.com/2013/06/ejemplomodelovistacontrolador.html 4/22
21/4/2017 CoDejaVu:EjemploModeloVistaControlador

ejecutan los eventos para la lgica de los procesos anteriores, la forma


deobtenerlosdatosycomoseleenvanparmetrosdeconsultaalaBD.

ElControlador.

Esta parte del patrn es la que define la lgica de administracin del sistema,
establecelaconexinentrelavistayelmodelo.

ClasePrincipal.

Esta clase contiene el mtodo main que ejecuta la aplicacin,


el mtodo hace un llamado al mtodo iniciar el cual crea las
instancias de las clases ventanas y la clase Logica estableciendo
lasrelacionesconlaclaseCoordinador.

Acadainstanciadelasclasesselesenvaunainstanciadelaclase
Coordinador, y a la instancia de Coordinador se le enva cada
instancia de las clases, esto por medio de los mtodos set y get
estableciendo las relaciones necesarias y por ultimo se usa la instancia de la clase
VentanaPrincipalparacargarlaenpantalla.

1 privatevoidiniciar(){
2 /**Seinstancianlasclases*/
3 miVentanaPrincipal=newVentanaPrincipal();
4 miVentanaRegistro=newVentanaRegistro();
5 miVentanaBuscar=newVentanaBuscar();
6 miLogica=newLogica();
7 miCoordinador=newCoordinador();
8
9 /**Seestablecenlasrelacionesentreclases*/
10 miVentanaPrincipal.setCoordinador(miCoordinador);
11 miVentanaRegistro.setCoordinador(miCoordinador);
12 miVentanaBuscar.setCoordinador(miCoordinador);
13 miLogica.setCoordinador(miCoordinador);
14
15 /**Seestablecenrelacionesconlaclasecoordinador*/
16 miCoordinador.setMiVentanaPrincipal(miVentanaPrincipal);
17 miCoordinador.setMiVentanaRegistro(miVentanaRegistro);
18 miCoordinador.setMiVentanaBuscar(miVentanaBuscar);
19 miCoordinador.setMiLogica(miLogica);
20
21 miVentanaPrincipal.setVisible(true);
22 }

ClaseCoordinador.

Estaclasecontienetodalalgicaderelacionesenelaplicativo,
eselpuenteentreelmodeloylasvistas.

Puede contener instancias locales tanto de clases de la vista


como de clases del modelo, estas instancias tienen
sus respectivos mtodos set y get permitiendo el flujo de
llamadosdelsistema.

Cuando se desea registrar una persona desde la clase


VentanaRegistro se hace un llamado
al mtodo registrarPersona() de la clase Coordinador,
posteriormente esta clase llama al mtodo ValidarRegistro()
de la clase Logica y esta a su vez realiza las validaciones
correspondientes para determinar si se llama o no
almtodoRegistrarPersona()delaclasePersonaDao.

1 publicLogicagetMiLogica(){
2 returnmiLogica;
3 }
4
5 publicvoidsetMiLogica(LogicamiLogica){
6 this.miLogica=miLogica;
7 }
8
9 publicvoidmostrarVentanaRegistro(){
http://codejavu.blogspot.com/2013/06/ejemplomodelovistacontrolador.html 5/22
21/4/2017 CoDejaVu:EjemploModeloVistaControlador
9 publicvoidmostrarVentanaRegistro(){
10 miVentanaRegistro.setVisible(true);
11 }
12
13 publicvoidmostrarVentanaConsulta(){
14 miVentanaBuscar.setVisible(true);
15 }
16
17 publicvoidregistrarPersona(PersonaVomiPersona){
18 miLogica.validarRegistro(miPersona);
19 }

LaAplicacin.
ElSistemaestadesarrolladocomounproyectoEclipse,
En la siguiente imagen vemos que se crearon tres
paquetes principales y de esta forma se tiene
independiente la parte de la vista, el modelo y el
controlador, el paquete modelo posee los
paquetes conexin dao y vo ya que aunque
pertenecen al modelo y la lgica de negocio debe
establecersetambinsuindependenciaconrespectoa
lasoperaciones,esdecir,lasclasesVoporejemplono
poseen mtodos de operaciones asociadas a
la lgica de negocio, tan solo deben representar las
tablas de la BD, entonces en el paquete vo se
agruparntodaslasclasesequivalenteaentidades.

El proyecto tiene los directorios db y conector, estos


directoriossecrearonsolamenteparaagregarelscript
de creacin de la BD y el mysql connector, este ultimo debe ser agregado al build
path para que el sistema pueda funcionar (sobre el proyecto, clic
derecho/configureBuildpath...).

Conclusiones.
Comovimostenemosunproyectofuncionalquerealizalasoperacionesbsicasdel
CRUD, y donde todas sus partes se encuentran separadas por funcionalidades,
separando la parte visual de la lgica de negocio y estableciendo relaciones entre
ellas............ en si se desarroll como ejemplo practico, existen validaciones
muy bsicas y procesos simples pero pensado en modo de ejemplo sin mayor
complejidad, tambin se utilizan algunos conceptos vistos en entradas anteriores
comoeselcasodelmanejodeexcepciones,patronesentreotros...

Descarga.

En el link de descarga se encuentra el archivo .rar con la aplicacin, solo


es cuestin de descomprimir y abrir con Eclipse pero si usas NetBeans te
interesarestaentradaconunvdeopasoapasodecomoabrirloenel............
(recuerdenqueesgratis.....nadacuestaopinar,compartiroagradecer:))

YListo,comosemencionesunejemplosimple,sinmuchalgicaparaaplicar,pero
la intencin es dar a conocer un poquito mas claro como se puede aplicar el MVC,
esperoqueesteejemploseadeutilidad.....)

TambintepodraInteresar.
QuesonlosPatronesdeDiseo?
EjemploConectandoJavaconMySql
ManejodeExcepcionesenJava
ConceptosBsicosdeProgramacinOrientadaaObjetos.
StringVrsStringBufferVrsStringBuilder?
ComparandoFechasEnJava
IntegracinContinua,PrimerosPasosConJenkins
LeerArchivoPropertiesenJava
TutorialProyectoWebConEclipse

http://codejavu.blogspot.com/2013/06/ejemplomodelovistacontrolador.html 6/22

You might also like