Está en la página 1de 18

2.2.

ARQUITECTURA MVC (MODELO-VISTA-CONTROLADOR)

Es un patrón de arquitectura de software, que separa los datos y la lógica de negocio


de una aplicación de la interfaz de usuario y el módulo encargado de gestionar los eventos y
las comunicaciones. Para ello MVC propone la construcción de tres componentes distintos
que son el modelo, la vista y el controlador, es decir, por un lado, define componentes para
la representación de la información, y por otro lado para la interacción del usuario.
Este patrón de arquitectura de software se basa en las ideas de reutilización de
código y la separación de conceptos, características que buscan facilitar la tarea de desarrollo
de aplicaciones y su posterior mantenimiento.
Modelos
Es la capa donde se trabaja con los datos, por tanto, contendrá mecanismos para acceder
a la información y también para actualizar su estado. Los datos los tendremos habitualmente
en una base de datos, por lo que en los modelos tendremos todas las funciones que accederán
a las tablas y harán los correspondientes selects, updates, inserts, etc.
No obstante, cabe mencionar que cuando se trabaja con MCV lo habitual también es utilizar
otras librerías como PDO o algún ORM como Doctrine, que nos permiten trabajar con
abstracción de bases de datos y persistencia en objetos. Por ello, en vez de usar directamente
sentencias SQL, que suelen depender del motor de base de datos con el que se esté trabajando,
se utiliza un dialecto de acceso a datos basado en clases y objetos.
Vistas
Las vistas, como su nombre nos hacen entender, contienen el código de nuestra aplicación
que va a producir la visualización de las interfaces de usuario, o sea, el código que nos
permitirá renderizar los estados de nuestra aplicación en HTML. En las vistas nada más
tenemos los códigos HTML y PHP que nos permite mostrar la salida.
En la vista generalmente trabajamos con los datos, sin embargo, no se realiza un acceso
directo a éstos. Las vistas requerirán los datos a los modelos y ellas se generarán la salida, tal
como nuestra aplicación requiera.
Controladores
Contiene el código necesario para responder a las acciones que se solicitan en la aplicación,
como visualizar un elemento, realizar una compra, una búsqueda de información, etc.
En realidad, es una capa que sirve de enlace entre las vistas y los modelos, respondiendo
a los mecanismos que puedan requerirse para implementar las necesidades de nuestra
aplicación. Sin embargo, su responsabilidad no es manipular directamente datos, ni mostrar
ningún tipo de salida, sino servir de enlace entre los modelos y las vistas para implementar
las diversas necesidades del desarrollo.

2.2.1. DESCRIPCIÓN DEL CASO DE ESTUDIO

Préstamo de libros de una biblioteca……………………………..

2.2.2. REQUERIMIENTOS

2.2.2.1. Identificar Actores y Caso de Uso

 Identificar Actores
uc Identificar Actores

Venta de
productos

Cliente
Administrador

Ilustración ¡Error! No hay texto con el estilo especificado en el documento..1. Identificar Actores

 A1: Administrador del local: Es el encargado de las ventas y del sistema de la tienda.
 A2: Cliente: Es la persona que solicita un producto de la tienda.

 Identificar Caso de Uso


 CU1. Gestionar Categoría
 CU2. Gestionar Producto
 CU3. Gestionar Nota de venta

2.2.2.2. Detalle de Caso de Uso

CU1. Gestionar Categoría


uc CU1 Gestionar Categoria

CU1 Gestionar
Categoria

Administrador

Caso de Uso CU1. Gestionar Categoría


Propósito Gestionar categoría.
Permite gestionar la categoría de los productos almacenadas en
Descripción
el sistema
Actores Administrador del sistema.
Actor Iniciador Administrador del sistema.
Precondición Gestionar categoría.
Proceso 1.- Insertar categoría.
1.1 agregar la información
1.2. insertar los datos
1.3. guardar datos
2.- Modificar genero
2.1. seleccionar categoría
2.2. modificar datos
2.3. guardar cambios
3.- Eliminar categoría
3.1. seleccionar categoría
3.2. confirmar eliminación
3.3. guardar cambios
Postcondición Gestionar Producto
Excepciones 1. Datos incorrectos
2. No se seleccionó ninguna categoría
3. No se confirmó la eliminación
Tabla ¡Error! No hay texto con el estilo especificado en el documento..1. Detalle de caso de uso 1 -

Gestionar Categoría

CU2. Gestionar Producto


uc CU2 Gestionar Producto

CU2 Gestionar
Producto

Administrador

Caso de Uso CU2. Gestionar Producto


Propósito Gestionar las producto.
Permite gestionar los producto almacenadas en el sistema
Descripción
Actores Administrador del sistema.
Actor Iniciador Administrador del sistema.
Precondición Gestionar categoría.
Proceso 1.- Insertar producto.
1.1 agregar la información
1.2. seleccionar categoría
1.3. insertar los datos
2.- Modificar producto
2.1. seleccionar producto
2.2. modificar datos
2.3. guardar cambios
3.- Eliminar producto
3.1. seleccionar producto
3.2. confirmar eliminación
3.3. guardar cambios

Postcondición --------
Excepciones 1.1 Si no selecciona ninguna categoría no se podrá almacenar la
información

Tabla ¡Error! No hay texto con el estilo especificado en el documento..2. Detalle de caso de uso 2 -

Gestionar Producto
CU3. Gestionar Nota Venta

uc CU3 Gestionar Nota Venta

CU3 Gestionar Nota


Venta

Cliente

Caso de Uso CU3. Gestionar Nota Venta


Propósito Gestionar las nota de venta.
Permite gestionar la nota de venta en un carrito a tu propia
Descripción
elección de productos almacenadas en el sistema
Actores Cliente.
Actor Iniciador Administrador del sistema.
Precondición Gestionar categoría, Gestionar producto.
Proceso 1.- registrar préstamo.
1.1. seleccionar los productos que desee
1.2. agregarlas al carrito
1.3. ingresar la cantidad de productos
1.4. guardar transacción

Postcondición --------
Excepciones 1.1 Si no selecciona ningún producto, no se podrá almacenar la
información

Tabla ¡Error! No hay texto con el estilo especificado en el documento..3. Detalle de caso de uso - Gestionar

Nota Venta
2.2.3. ANÁLISIS

2.2.3.1. Diagrama de Colaboración

CU1. Gestionar categoría


sd CU1 Gestionar Categoria

1: Actualizate() 4.5: getTabla() :DefaultTableModel


4.4: getGenero() :DefaultTableModel
3.5: getTabla() :DefaultTableModel
3.4: getGenero() :DefaultTableModel

2.4: getGenero() :DefaultTableModel 2.5: getTabla() :DefaultTableModel

1.2: getTabla() :DefaultTableModel


1.1: getGenero() :DefaultTableModel

NCategoria 2.2: GuardarGenero()


3.2: ModificarGenero() DCategoria
PCategoria
4.2: EliminarGenero()
2.3: Actualizate()

2.1: setGenero(int, String)


3.3: Actualizate()

4.3: Actualizate() 1.3: Conexion()


3.1: Modificar(int, String)

4.1: Eliminar(int)

2: [__REGISTRAR]:actionPerformed(ActionEvent)

3: [__MODIFICAR]:actionPerformed(ActionEvent)
CCategoria Conexion
Administrador 4: [__ELIMINAR]:actionPerformed(ActionEvent)

1.4: initComponente()

CU2. Gestionar Producto


sd CU2 Gestionar Producto

2: [__REGISTRAR]:actionPerformed(ActionEvent)
1.8: initComponente()
3: [__MODIFICAR]:actionPerformed(ActionEvent)
CProducto
Administrador 4: [__ELIMINAR]:actionPerformed(ActionEvent)
2.1: setPelicula(String, String, int, int, int)
2.3: Actualizate()
3.1: ModificarPelicula(String, String, int, int, int)
3.3: Actualizate()
4.1: EliminarPelicula(String)
4.3: Actualizate() 4.2: Eliminar()
3.2: Modificar()
2.2: Guardar()

1.5: ListaTabla() :DefaultTableModel NProducto 1.6: getTabla() :DefaultTableModel

PProducto 2.4: ListaTabla() :DefaultTableModel 2.5: getTabla() :DefaultTableModel DProducto


3.5: getTabla() :DefaultTableModel
1.4: Actualizate() 3.4: ListaTabla() :DefaultTableModel
4.5: getTabla() :DefaultTableModel
4.4: ListaTabla() :DefaultTableModel
1: CargarCombo()

1.7: Conexion()

1.1: ListarCombo() :DefaultComboBoxModel

1.2: getCombo() :DefaultComboBoxModel 1.3: Conexion()

NCategoria DCategoria Conexion


CU3. Gestionar Nota Venta
sd CU3 Gestionar NotaVenta

1.4: initComponente()

CNotaVenta

2.4: CargarCabezera() 2.1: GuardarFicha(int, String, String, int, Date)


3.1: ModificarFicha(int, String, String, int, Date)
3.3: CargarCabezera() 4.1: EliminarFicha(int)
7.1: CargarFichaPrestamo()
4.3: Limpiar() 5.1: GuardarItem(int, String, int)

5.4: CargarCarrito() 6.1: EliminarItem(int, String) 4.2: Eliminar()

6.3: CargarCarrito() 3.2: Modificar()


2.2: GuardarFicha()

2.6: Buscar() :ArrayList


2.5: BuscarFicha(int) :ArrayList NNotaVenta
3.5: Buscar() :ArrayList
3.4: BuscarFicha(int) :ArrayList
PNotaVenta 7.7: Buscar() :ArrayList DNotaVenta
1: CargarPeliculas() 5.5: CargarDetalle(int) :DefaultTableModel 7.4: Cargar() :DefaultTableModel
6.4: CargarDetalle(int) :DefaultTableModel
6.5: Cargar() :DefaultTableModel
7.3: CargarDetalle(int) :DefaultTableModel 6.2: Eliminar()
5.6: Cargar() :DefaultTableModel 2.3: Conexion()
7.2: CargarCarrito() 7.6: BuscarFicha(int) :ArrayList
5.2: Guardar()
7.5: CargarCabezera()

1.1: ListaTabla() :DefaultTableModel 5.3: Conexion()


DDetalle

NProducto 1.2: getTabla() :DefaultTableModel


DProducto 1.3: Conexion() Conexion
2.2.4. DISEÑO

2.2.4.1. Diseño de la arquitectura


deployment DisenoArq MVC

Librerias

«css»
Boostrap

Vista Modelo

Controlador
BaseDatos

«class»
DataBaseHelper
2.2.4.2.Diseño de la base de datos

 Diseño Conceptual de la Base de Datos


class Modelo de dominio

- cantidad
- precio

vende Producto
NotaVenta
- codigo
- nro
- nombre
- fecha
- precio
- montoTotal Categoria
1 0..* - estado
- id
- nombre
- estado

Ilustración ¡Error! No hay texto con el estilo especificado en el documento..2. Diseño Conceptual de la Base

de Datos

 Diseño Lógico de la Base de Datos


Tabla Categoría
PK
Id nombre estado

Tabla Producto
PK FK
codigo nombre precio estado IdCategoria

Tabla NotaVenta
PK
nro fecha montoTotal

Tabla Vende
FK FK
NroNota CodigoProducto cantidad precio
PK
 Diseño Físico de la Base de Datos
Tabla de Volumen
Script
CREATE TABLE CATEGORIA
(
ID INT NOT NULL PRIMARY KEY,
NOMBRE VARCHAR(255) NOT NULL,
ESTADO BIT NOT NULL
);
INSERT INTO CATEGORIA (ID,NOMBRE,ESTADO)VALUES(1,'LACTEOS',1);
INSERT INTO CATEGORIA (ID,NOMBRE,ESTADO)VALUES(2,'CARNES',1);

CREATE TABLE PRODUCTO


(
CODIGO INT NOT NULL PRIMARY KEY,
NOMBRE VARCHAR(255) NOT NULL,
PRECIO INT NULL,
ESTADO BIT NOT NULL,
IDCATEGORIA INT NOT NULL,
FOREIGN KEY (IDCATEGORIA) REFERENCES CATEGORIA (ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);

INSERT INTO PRODUCTO (CODIGO,NOMBRE,PRECIO,ESTADO,IDCATEGORIA) VALUES


(1,'LECHE',5,1,1);

CREATE TABLE NOTAVENTA


(
NRO INT NOT NULL PRIMARY KEY,
FECHA DATE NOT NULL,
MONTOTOTAL DOUBLE NOT NULL
);
INSERT INTO NOTAVENTA (NRO, FECHA, MONTOTOTAL) VALUES (1,'2018/03/27',50);

CREATE TABLE VENDE


(
IDDETALLE INT NOT NULL,
CANTIDAD INT NOT NULL,
PRECIO DOUBLE NOT NULL,
NRONOTA INT NOT NULL,
FOREIGN KEY (NRONOTA) REFERENCES NOTAVENTA(NRO)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CODIGOPRODUCTO INT NOT NULL,
FOREIGN KEY (CODIGOPRODUCTO) REFERENCES PRODUCTO (CODIGO)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
PRIMARY KEY (ID_DETALLE, NRONOTA, CODIGOPRODUCTO)
);
INSERT INTO VENDE (ID_DETALLE, CANTIDAD,PRECIO, NRONOTA, CODIGOPRODUCTO) VALUES
(1,8,5,1,1), (2,2,5,1,1);
2.2.4.3. Diseño del detalle procedimental

CU1. Gestionar Categoría


Diagrama de clase dinámico
class CU1 Gestionar Categoria

Dato::DCategoria

- nro: int
Negocio::NCategoria - nombre: String

javax.swing.JFrame + NCategoria() + DCategoria()


Vista::PCategoria + getNro() : int
~NegocioCategoria + setGenero(int, String) : void
-DatoCategoria +
+ getGenero() : DefaultTableModel getNombre() : String
+ PCategoria() + ListarCombo() : DefaultComboBoxModel + setNro(int) : void
+ Actualizate() : void + Modificar(int, String) : void + setNombre(String) : void
+ Eliminar(int) : void + GuardarGenero() : void
+ getNro(String) : int + ModificarGenero() : void
-Vista
+ EliminarGenero() : void
+ getTabla() : DefaultTableModel
+ getFila() : int
-NegocioCategoria
+ getCombo() : DefaultComboBoxModel

ActionListener -con
Control::CCategoria
Dato::Conexion
+ CCategoria(NCategoria, PCategoria)
+ initComponente() : void - con: Connection
+ actionPerformed(ActionEvent) : void
+ main(String[]) : void + Conexion()
+ getConexion() : Connection
+ cerrarConexion() : Connection
Diagrama de secuencia
sd CU1 Gestionar Categoria

CCategoria PCategoria NCategoria DCategoria Conexion

Administrador

Actualizate()
getGenero() :DefaultTableModel
getTabla() :DefaultTableModel
Conexion()

initComponente()

alt __REGISTRAR

[__REGISTRAR]:actionPerformed(ActionEvent)

setGenero(int, String)

GuardarGenero()
Conexion()

Actualizate()

getGenero() :DefaultTableModel

getTabla() :DefaultTableModel

Conexion()

alt __MODIFICAR

[__MODIFICAR]:actionPerformed(ActionEvent)

Modificar(int, String)

ModificarGenero()
Conexion()

Actualizate()

getGenero() :DefaultTableModel
getTabla() :DefaultTableModel

alt __ELIMINAR

[__ELIMINAR]:actionPerformed(ActionEvent)

Eliminar(int)
EliminarGenero()

Conexion()

Actualizate()
getGenero() :DefaultTableModel

getTabla() :DefaultTableModel

Conexion()
CU2. Gestionar Producto
Diagrama de clase dinámico
class CU2 Gestionar Producto

Dato::DProducto

- cod: String
- titulo: String
- duracion: int
- precio: int
- gen: int
javax.swing.JFrame Negocio::NProducto
Vista::PProducto ~NegocioPelicula -Datopelicula
+ DProducto()
+ NProducto()
+ getCod() : String
+ PProducto() + ListaTabla() : DefaultTableModel
+ getTitulo() : String
+ Actualizate() : void + setPelicula(String, String, int, int, int) : void
+ getDuracion() : int
+ CargarCombo() : void + ModificarPelicula(String, String, int, int, int) : void
+ getPrecio() : int
+ EliminarPelicula(String) : void
+ getGen() : int
~Vista
+ setCod(String) : void
+ setTitulo(String) : void
+ setDuracion(int) : void
~NegocioPelicula + setPrecio(int) : void
+ setGen(int) : void
+ getTabla() : DefaultTableModel
+ Guardar() : void
+ Modificar() : void
+ Eliminar() : void
ActionListener
Control::CProducto

+ CProducto(NProducto, NCategoria, PProducto)


+ initComponente() : void
+ actionPerformed(ActionEvent) : void
+ main(String[]) : void

Dato::DCategoria -con

~NegocioGenero - nro: int


- nombre: String Dato::Conexion

Negocio::NCategoria - con: Connection


+ DCategoria()
+ NCategoria() -DatoCategoria + getNro() : int
-con + Conexion()
+ setGenero(int, String) : void + getNombre() : String
+ getConexion() : Connection
+ getGenero() : DefaultTableModel + setNro(int) : void
+ cerrarConexion() : Connection
+ ListarCombo() : DefaultComboBoxModel + setNombre(String) : void
+ Modificar(int, String) : void + GuardarGenero() : void
+ Eliminar(int) : void + ModificarGenero() : void
+ getNro(String) : int + EliminarGenero() : void
+ getTabla() : DefaultTableModel
+ getFila() : int
+ getCombo() : DefaultComboBoxModel
Diagrama de secuencia
sd CUS Gestionar Producto

CProducto PProducto NProducto DProducto NCategoria DCategoria Conexion

Administrador

CargarCombo()
ListarCombo() :DefaultComboBoxModel
getCombo() :DefaultComboBoxModel
Conexion()

Actualizate()
ListaTabla() :DefaultTableModel

getTabla() :DefaultTableModel
Conexion()

initComponente()

alt __REGISTRAR

[__REGISTRAR]:actionPerformed(ActionEvent)

setPelicula(String, String, int, int, int)

Guardar()

Conexion()

Actualizate()

ListaTabla() :DefaultTableModel

getTabla() :DefaultTableModel
Conexion()

alt __MODIFICAR

[__MODIFICAR]:actionPerformed(ActionEvent)

ModificarPelicula(String, String, int, int, int)

Modificar()

Conexion()

Actualizate()

ListaTabla() :DefaultTableModel

getTabla() :DefaultTableModel

Conexion()

alt __ELIMINAR
[__ELIMINAR]:actionPerformed(ActionEvent)

EliminarPelicula(String)

Eliminar()

Conexion()

Actualizate()

ListaTabla() :DefaultTableModel

getTabla() :DefaultTableModel

Conexion()
CU3. Gestionar Nota Venta
Diagrama de clase dinámico
class CU3 Gestionar NotaVenta

javax.swing.JFrame Dato::DNotaVenta
Vista::PNotaVenta
- nro: int
- nro: int = 0 Negocio::NNotaVenta - dias: int
- nombre: String - nombre: String
- fecha: Date + NNotaVenta() - direccion: String
- dia: int + GuardarFicha(int, String, String, int, Date) : void - fecha: Date
- direccion: String + GuardarItem(int, String, int) : void
- total: int = 0 -NegocioFicha + EliminarItem(int, String) : void ~DatoFicha + DNotaVenta()
+ EliminarFicha(int) : void + setNro(int) : void
+ PNotaVenta() + ModificarFicha(int, String, String, int, Date) : void + setDias(int) : void
+ CargarPeliculas() : void + BuscarFicha(int) : ArrayList<Object> + setNombre(String) : void
+ CargarCabezera() : void + CargarDetalle(int) : DefaultTableModel + setDireccion(String) : void
+ MensajeAddError() : void + setFecha(Date) : void
+ CargarCarrito() : void ~Vista + Guardar() : void
+ Limpiar() : void + Eliminar() : void
+ MensajeBuscarError() : void + Modificar() : void
~NegocioFicha
+ CargarFichaPrestamo() : void + Buscar() : ArrayList<Object>

ActionListener
~DatoDetalle
Control::CNotaVenta
Dato::DDetalle
+ CNotaVenta(NNotaVenta, PNotaVenta)
+ initComponente() : void - nro: int
+ actionPerformed(ActionEvent) : void - cod: String
+ main(String[]) : void - cantidad: int

+ DDetalle()
+ setNro(int) : void
+ setCod(String) : void
-NegocioPelicula
+ setCantidad(int) : void
+ Guardar() : void
Negocio::NProducto
+ Eliminar() : void
+ Cargar() : DefaultTableModel
+ NProducto()
+ ListaTabla() : DefaultTableModel
+ setPelicula(String, String, int, int, int) : void
+ ModificarPelicula(String, String, int, int, int) : void
+ EliminarPelicula(String) : void
-con -con
Dato::DProducto
Dato::Conexion
- cod: String
- titulo: String - con: Connection
- duracion: int
- precio: int + Conexion()
- gen: int + getConexion() : Connection
-Datopelicula -con + cerrarConexion() : Connection
+ DProducto()
+ getCod() : String
+ getTitulo() : String
+ getDuracion() : int
+ getPrecio() : int
+ getGen() : int
+ setCod(String) : void
+ setTitulo(String) : void
+ setDuracion(int) : void
+ setPrecio(int) : void
+ setGen(int) : void
+ getTabla() : DefaultTableModel
+ Guardar() : void
+ Modificar() : void
+ Eliminar() : void
Diagrama de secuencia
sd CU3 Gestionar NotaVenta

CNotaVenta PNotaVenta NNotaVenta DNotaVenta NProducto DProducto DDetalle Conexion

CargarPeliculas()
ListaTabla() :DefaultTableModel
getTabla() :DefaultTableModel
Conexion()

initComponente()
GuardarFicha(int, String, String, int, Date)
Guardar()
alt __GUARDAR Conexion()

CargarCabezera()

BuscarFicha(int) :ArrayList<Object>
Buscar() :ArrayList<Object>
Conexion()

ModificarFicha(int, String, String, int, Date)


Modificar()

Conexion()

CargarCabezera()

BuscarFicha(int) :ArrayList<Object>

Buscar() :ArrayList<Object>
alt __MODIFICAR
Conexion()

EliminarFicha(int)
Eliminar()

Conexion()

Limpiar()

GuardarItem(int, String, int)


Guardar()
Conexion()

CargarCarrito()

CargarDetalle(int) :DefaultTableModel

Cargar() :DefaultTableModel

Conexion()
alt __ELIMINAR

EliminarItem(int, String)

Eliminar()

Conexion()

CargarCarrito()

CargarDetalle(int) :DefaultTableModel

Cargar() :DefaultTableModel
alt __ADD_CARRITO
Conexion()

CargarFichaPrestamo()

CargarCarrito()

CargarDetalle(int) :DefaultTableModel

Cargar() :DefaultTableModel

Conexion()

alt __QUITAR

CargarCabezera()

BuscarFicha(int) :ArrayList<Object>

Buscar() :ArrayList<Object>

Conexion()

alt __BUSCAR

También podría gustarte