Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Copyright © (2019) por (Darwin Robles Caballero). Todos los derechos reservados.
Título: Desarrollo de Negocio para una ONG aplicando MVC
Autor/es: Darwin Robles Caballero
RESUMEN:
En este proyecto se desea aplicar todo lo avanzado sobre el patrón de MVC en ASP.Net C#
de la Materia Investigación Operativa 2
Desarrollando un sistema web de un modelo de negocio de una ONG para la creación de
Proyectos, tareas y asignación de estos.
Se pondrán en práctica conceptos de base de datos, se creara un solución de ASP. NET en c#
utilizando estilos de Bootstrap.
ABSTRACT:
In this project you can apply all the advanced aspects of the MVC methodology in ASP.Net C # of the
Subject Operational Research 2
Developing a web system of a business model of an NGO for the creation of projects, tasks and
assignments of these.
Database concepts are explained in practice, an ASP solution is created. NET is c # using Boostrap
styles.
Tabla De Contenidos
Lista De Figuras
Introducción
Existen muchas maneras para desarrollar un sistema, aplicación o página web para
administrar y gestionar información que una unidad de negocio genera, en este proyecto veremos
una de las maneras para poder crear un sistema de manera rápida y sencilla con el patrón de
MVC (Modelo, Vista y Controlador) que viene de sus siglas en ingles Model View Controller.
Su fundamento es la separación del código en tres capas diferentes.
MVC es un "invento" que ya tiene varias décadas y fue presentado incluso antes de la
aparición de la Web. No obstante, en los últimos años ha ganado mucha fuerza y seguidores
gracias a la aparición de numerosos frameworks de desarrollo web que utilizan el patrón MVC
como modelo para la arquitectura de las aplicaciones web.
Como ya hemos mencionado, MVC es útil para cualquier desarrollo en el que intervengan
interfaces de usuario.
Los ingenieros del software se dedican a estudiar de qué manera se pueden mejorar los procesos
de creación de software y una de las soluciones a las que han llegado es la arquitectura basada en
capas que separan el código en función de sus responsabilidades o conceptos. Por tanto, cuando
estudiamos MVC lo primero que tenemos que saber es que está ahí para ayudarnos a crear
aplicaciones con mayor calidad.
Una ONG desea elaborar una base de datos para llevar el seguimiento de todos sus proyectos.
Tiene diversas sedes en varios países que se encargan de gestionar y coordinar los proyectos de
ese país, cada uno de los cuales puede afectar a una o varias poblaciones. Sobre la sede se desea
mantener un identificador, la ciudad y país en el que se encuentra, junto cosa dirección, un
teléfono de contacto y el nombre del director. Cada sede gestiona un conjunto de proyectos, con
un código, un título, fechas de inicio y finalización, el presupuesto asignado y el nombre del
responsable. De cada proyecto es necesario conocer qué actuaciones se realizan en cada
población, almacenando el nombre, país y nº de habitantes y un identificador para diferenciarlas.
Además, se desea la inversión del proyecto que corresponde a la población y una pequeña
descripción de la actuación. Para finalizar cada proyecto se le podrá asignar tareas que tendrá
nombre, realizador de la tarea, cantidad de días y un detalle.
Se deberá como primer paso analizar el enunciado de la descripción del proyecto, para luego
crear la estructura de la base de datos
Posteriormente se creará la solución de ASP.Net con el patrón de MVC
Capítulo 2. Metodologia
2.1. MVC
MVC es un patrón de arquitectura el cual mantiene los ámbitos más importantes separados, los
inicios de mvc datan de los años 70, la primera implementación informal fue en Smalltalk un
lenguaje de programación reflexivo, recién en 1988 se consolido como patrón.
En marzo del 2009 se lanzó la primera versión oficial de MVC.NET 1.0, luego en 2012 se
incluyó Razor y Web Api en MVC.NET, además fue incluido como Open Source bajo la licencia
apache 2.0
• 1.0 — Lanzamiento
• 2.0 — Mejoras del Framework
• 3.0 — Vistas Razor, Unobtrusive Javascript
• 4.0 — Web Api, Asyncrono Controller, Azure
• 5.0 — Identity, Atributo de ruta, filter overrides
Quien trabajaron con Web forms podrán comprender con mayor profundidad estas diferencias,
ya que Web Forms es una réplica de los formularios Windows basados en eventos, pero para
Web.
• No más eventos
• Fin al Viewstate
• Adiós Postback
• Adiós a la vista de diseñador
• El ciclo de vida de la pagina es mucho más simple
• Podemos modificar a nuestro antojo las rutas (url)
• Integración de Ajax de forma natural
• Favorece la implementación de Inyección de dependencia e inversión de control
2.2. 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.
2.3. 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á la salida, tal como nuestra
aplicación requiera.
2.4. 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.
a) El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el usuario
pulsa un botón, enlace, etc.)
b) El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción
solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a través
de un gestor de eventos (handler) o callback.
c) El controlador accede al modelo, actualizándolo, posiblemente modificándolo de forma
adecuada a la acción solicitada por el usuario (por ejemplo, el controlador actualiza el carro
de la compra del usuario). Los controladores complejos están a menudo estructurados usando
un patrón de comando que encapsula las acciones y simplifica su extensión.
d) El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La
vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se
reflejan los cambios en el modelo (por ejemplo, produce un listado del contenido del carro de
la compra). El modelo no debe tener conocimiento directo sobre la vista. Sin embargo, se
podría utilizar el patrón Observador para proveer cierta indirección entre el modelo y la vista,
permitiendo al modelo notificar a los interesados de cualquier cambio. Un objeto vista puede
registrarse con el modelo y esperar a los cambios, pero aun así el modelo en sí mismo sigue
sin saber nada de la vista. Este uso del patrón Observador no es posible en las aplicaciones
Web puesto que las clases de la vista están desconectadas del modelo y del controlador. En
general el controlador no pasa objetos de dominio (el modelo) a la vista, aunque puede dar la
orden a la vista para que se actualice. Nota: En algunas implementaciones la vista no tiene
acceso directo al modelo, dejando que el controlador envíe los datos del modelo a la vista.
Por ejemplo, en el MVC usado por Apple en su framework Cocoa. Suele citarse como
Modelo-Interface-Control, una variación del MVC más puro
e) La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo
nuevamente...
2.7. Herramientas
En este proyecto utilizaremos algunas herramientas que no serán descritas en este proyecto,
por que se entiende que en la materia ya se tiene un conocimiento previo.
• Base de datos relaciones (SQLServer 2014 Management Studio)
• Visual Studio 2017
Capítulo 3. Desarrollo
en el nueva aplicación Web ASP.NET cuadro de diálogo, elija MVC y, a continuación, elija
Aceptar.
Se deberá crear un base de datos con el nombre de ONG y se ejecutaran los siguientes scripts
para la creación de las tablas mostradas en la base de datos.
CREATE TABLE [dbo].[Actuacion](
[idPoblacion] [int] NOT NULL,
[idProyecto] [int] NOT NULL,
[Descripcion] [varchar](255) NOT NULL,
[Inversion] [numeric](18, 0) NOT NULL,
PRIMARY KEY CLUSTERED
(
[idPoblacion] ASC,
[idProyecto] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Poblacion] Script Date: 16/07/2019
18:49:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Poblacion](
[id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](100) NOT NULL,
[Numero_Habitantes] [int] NOT NULL,
[Pais] [varchar](100) NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Proyecto] Script Date: 16/07/2019
18:49:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Proyecto](
[Codigo] [int] IDENTITY(1,1) NOT NULL,
[Titulo] [varchar](100) NOT NULL,
[Inicio] [date] NOT NULL,
[Fin] [date] NOT NULL,
[Presupuesto] [numeric](18, 0) NOT NULL,
[Responsable] [varchar](255) NOT NULL,
[Sede] [int] NULL,
PRIMARY KEY CLUSTERED
(
[Codigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Sede] Script Date: 16/07/2019 18:49:09
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Sede](
[id] [int] IDENTITY(1,1) NOT NULL,
[Ciudad] [varchar](255) NOT NULL,
[Pais] [varchar](255) NOT NULL,
[Direccion] [varchar](255) NOT NULL,
[Telefono] [varchar](50) NULL,
[Director] [varchar](100) NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Tarea] Script Date: 16/07/2019 18:49:09
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Tarea](
[id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](255) NULL,
[Realizador] [varchar](255) NULL,
[Dias] [int] NULL,
[idProyecto] [int] NOT NULL,
[Detalle] [varchar](255) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Actuacion] WITH CHECK ADD CONSTRAINT
[FK__Actuacion__idPob__22AA2996] FOREIGN KEY([idPoblacion])
REFERENCES [dbo].[Poblacion] ([id])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Actuacion] CHECK CONSTRAINT
[FK__Actuacion__idPob__22AA2996]
GO
ALTER TABLE [dbo].[Actuacion] WITH CHECK ADD CONSTRAINT
[FK__Actuacion__idPro__239E4DCF] FOREIGN KEY([idProyecto])
REFERENCES [dbo].[Proyecto] ([Codigo])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
Referencia
(Microsoft, 201
Referencias
Microsoft. (10 de Julio de 2019). Support Office - Crear Modelo BD. Obtenido de Support
Office: https://support.office.com/es-es/article/crear-un-modelo-de-base-de-datos-
tambi%C3%A9n-denominado-diagrama-relaci%C3%B3n-de-entidades-7042e719-384a-
4b41-b29c-d1b35719fc939)
(Suarez, 2014)
Referencias
Microsoft. (10 de 07 de 2019). Support Office - Crear Modelo BD. Obtenido de Support Office:
https://support.office.com/es-es/article/crear-un-modelo-de-base-de-datos-
tambi%C3%A9n-denominado-diagrama-relaci%C3%B3n-de-entidades-7042e719-384a-
4b41-b29c-d1b35719fc93
Suarez, M. A. (02 de Enero de 2014). Desarrollo Web. Obtenido de
https://desarrolloweb.com/articulos/que-es-mvc.html
Referencias
Microsoft. (10 de 07 de 2019). Support Office - Crear Modelo BD. Obtenido de Support Office:
https://support.office.com/es-es/article/crear-un-modelo-de-base-de-datos-
tambi%C3%A9n-denominado-diagrama-relaci%C3%B3n-de-entidades-7042e719-384a-
4b41-b29c-d1b35719fc93
Suarez, M. A. (02 de Enero de 2014). Desarrollo Web. Obtenido de
https://desarrolloweb.com/articulos/que-es-mvc.html
(Pedia, 2019)
Referencias
Microsoft. (10 de 07 de 2019). Support Office - Crear Modelo BD. Obtenido de Support Office:
https://support.office.com/es-es/article/crear-un-modelo-de-base-de-datos-
tambi%C3%A9n-denominado-diagrama-relaci%C3%B3n-de-entidades-7042e719-384a-
4b41-b29c-d1b35719fc93
Pedia, C. W. (27 de Junio de 2019). Wikipedia. Obtenido de
https://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador
Suarez, M. A. (02 de Enero de 2014). Desarrollo Web. Obtenido de
https://desarrolloweb.com/articulos/que-es-mvc.html
(Microsoft, 2019)
Referencias