Date post: | 12-Oct-2015 |
Category: |
Documents |
Upload: | evelyn-monica-vargas-gamboa |
View: | 5 times |
Download: | 0 times |
of 76
5/21/2018 capitulo9
1/76
9. Taller de Formacin.NET
Ing. Gustavo Guimerans
A/C. Nicols Sampietro
A/C. Emiliano Martnez
5/21/2018 capitulo9
2/76
554
TallerdeFormacin.N
ET
Capa de acceso a datos
1 Introduccin
La capa que describe la agrupacin lgica de las funcionalidades y componentes que ac-ceden a los datos (fuentes de datos, como bases de datos relacionales o servicios web) en unaaplicacin se conoce como la capa de datos (data layer).
1.1 Descripcin General
Esta capa provee acceso a la informacin dentro del sistema y datos expuestos en la red.Expone interfaces genricas que la capa de negocio puede consumir.
La capa de datos usualmente incluye: Data Access components: estos componentes abstraen la lgica requerida para acceder
a los almacenes de datos. Centralizan las funcionalidades comunes de acceso a datos con elobjetivo de lograr una aplicacin ms simple de congurar y mantener.
Este documento est basado en la segunda edicin del libro Mi-crosoft Application Architecture Guide [1]. Su lectura brinda unacompleta gua sobre el uso de las distintas tecnologas.
5/21/2018 capitulo9
3/76
555
TallerdeFormacin.NET
Service agents: cuando un componente de negocio necesita acceder a datos que proveeun servicio externo, es necesario implementar cdigo. Los componentes que implementanesta actividad son los service agents. Permiten aislar la diversidad de requerimientos que im-ponen la llamada a estos servicios y brindan otros servicios como caching, soporte ofine yun mapeo entre el formato de quien expone el servicio y la aplicacin.
2 Consideraciones generales de diseo
La capa de acceso a datos debe cumplir con los requerimientos de la aplicacin: ser e-ciente y segura, fcil de mantener y extender cuando hay cambios en los requerimientos dela capa de negocio. En este captulo se describen los principales puntos generales a tener encuenta al momento de disear la capa de acceso a datos. Elegir el tipo adecuado de tecnologadepende de:
el tipo de datos que se tengan que manejar, cmo se necesiten manipular. Abstraer. Implementar interfaces de acceso a datos con
bajo acoplamiento. Encapsular las funcionalidades de acceso a datos en la capa de acceso adatos.
La capa debe: Ocultar detalles de acceso a la fuente de datos. Ser responsable de: manejar las conexiones, generar consultas, mapear entidades de la
aplicacin a estructuras de datos. Decidir como mapear entidades de la aplicacin a estruc-turas de datos.
Depender bsicamente del tipo de entidad que se use en la aplicacin. Diseos comunessiguen enfoques:
Patrones Domain Model Table Module. Frameworks Object/Relational Mapping (O/RM). Considerar estructuras de datosconsolidadas.
5/21/2018 capitulo9
4/76
556
TallerdeFormacin.N
ET
Ej. Si se estn exponiendo datos a travs de servicios considerar Data Transfers Objects(DTOs). Decidir cmo se manejarn las conexiones.
La capa de acceso a datos deber crear y manejar todas las conexiones a fuentes de datosque requiera la aplicacin. Es necesario elegir el mtodo apropiado para almacenar y protegerla informacin de conexin, eventualmente mediante secciones encriptadas de archivos de
conguracin. Determinar cmo se manejarn las excepciones. La capa de acceso a datos deber manejar las excepciones asociadas a operaciones
CRUD (Create, Read, Update and Delete) con las fuentes de datos. Considerar riesgos deseguridad. Reducir trco muchas idas y vueltas.
Considerar operaciones por lotes (batch) en simples sentencias SQL. Considerar los objetivos de escalabilidad y de performance.
3 Consideraciones especicas de diseo
Al momento de desarrollar el diseo hay varios problemas comunes a considerarse. Es-tos problemas pueden categorizarse en areas especicas de diseo. Las areas donde msproblemas existen son: Procesamiento por lotes (batch), Binary Large Objects (BLOBs), Co-nexiones, Formato de datos, Manejo de excepciones, Object Relational Mapping, Consultas,Procedimientos almacenados (Stored Procedures).
Stored Procedures vs. Dynamic SQL Transacciones Validaciones XML.Por cada una de las areas, mencionadas anteriormente, existen varios puntos a conside-
rar. A continuacin se mencionan algunos ejemplos asociados a tecnologas especcas. Enel captulo 8 del libro [1] se describen cada uno de esos puntos.
3.1 Transacciones
Microsoft SQL Server cada SQL ejecuta como una transaccin individual (auto-com-mit transaction mode).
Para clases del namespace System.Transactions, considerar usar el modo implcito pro-visto por el objeto TransactionScope.
3.2 XML
Considerar usar XML readers y writers para acceder a datos XML (especialmente cuan-do sea mucho volumen). Si se desea interactuar con una base relacional, considerar usarobjetos que soporten esa funcionalidad tales como ADO.NET DataSet.
4 Consideraciones tecnolgicas
Una de las decisiones ms importantes a tomar, al momento de implementar un sistema,pasa por la eleccin de la tecnologa. La tecnologa adecuada depender del tipo de aplicaciny los requerimientos. A continuacin, se mencionan casos concretos que ayudan a tomar una
correcta decisin. Si se requiere soporte bsico para consultas y parmetros, considerar directamente ob-jetos ADO.NET.
5/21/2018 capitulo9
5/76
557
TallerdeFormacin.NET
Si se requiere soporte para escenarios de acceso a datos ms complejos o simplicar elcdigo de acceso a datos, considerar utilizar el Enterprise Library Data Access ApplicationBlock.
Para aplicaciones Web data driven con pginas basadas en el modelo de datos de la basede datos, considerar utilizar ASP.NET Dynamic Data.
Para manipular datos con formato XML, considerar usar clases en el namespace System.Xml, o Linq to XML (XLinq). Con interfaces ASP.NET, considerar DataReader para acceder a los datos con la mxi-
ma performance de renderizado. Ideales para operaciones read-only, forward-only. Para acceder a SQL Server, considerar ADO.NET la namespace SqlClient para maxi-
mizar performance. En SQL Server 2008, considerar FILESTREAM para una mayor exibilidad en el alma-
cenamiento y para acceder a datos BLOB. Si se disea una capa de negocio orientada a objetos en el patrn Domain Model, con-
siderar un framework Object/Relation Mapping (O/RM), tal como el ADO.NET Entity
Framework o el NHibernate framework de cdigo libre.5 Diseando componentes de datos
En lo que resta de la leccin se revisarn los pasos para el diseo de componentes aso-ciados a datos. El primer paso es identicar las restricciones asociadas a los datos que seaccedern, lo cual ayudar a identicar la tecnologa de acceso a datos adecuada. El siguientepaso consiste en decidir la estrategia de mapeo y el enfoque de acceso a datos que se deseaimplementar, esto consiste en identicar las entidades de negocio y la forma de represen-tarlas. Luego se puede determinar cmo los componentes de acceso a datos se conectarn a
la fuente de datos. Finalmente, se determina la estrategia para manejo de excepciones en elacceso a datos.Es importante conocer con cules tecnologas se cuenta en la plataforma y para qu es-
cenarios es mejor una que otra. De esta manera, se pueden tomar otras decisiones necesarias(por ejemplo: capacitacin sobre determinada tecnologa). Por tal motivo, se incluye en estagua una descripcin de las tecnologas disponibles.
El sitio web de la Microsoft Developer Network (MSDN) [2] es el lugar indicado parautilizar como referencia en todo momento de un proyecto en la plataforma Microsoft, prin-cipalmente al momento de desarrollar, en particular para la plataforma .NET Framework, yaque, por ejemplo, cuenta con documentacin y ejemplos.
5.1 Paso 1 Seleccionar la tecnologa de acceso a datos
En este paso es que se hace necesario conocer las tecnologas disponibles en la plataformaMicrosoft, cundo es recomendable su uso, escenarios comunes, as como sus ventajas y con-sideraciones. A continuacin se pretende llegar a cubrir estos puntos. Dada la importanciaque tienen hoy en da ADO.NET Entity Framework (EF) y LINQ se profundizar.
ADO.NET Core. Brinda facilidades para recuperar, alterar y administrar informacin.Incluye proveedores para bases de datos SQL Server, OLE DB, Open Database Connectivity(ODBC), SQL Server Compact Edition y Oracle.
ADO.NET Data Services Framework. Este framework permite exponer informacinde cualquier fuente de datos Linq, tpicamente un Entity Data Model, mediante REST sobreHTTP. La informacin puede direccionarse mediante Uniform Resource Identiers (URIs).
5/21/2018 capitulo9
6/76
558
TallerdeFormacin.N
ET
Los servicios Web pueden congurarse para que retornen los datos con formato Atom yJavaScript Object Notation (JSON).
ADO.NET Entity Framework (EF): es un conjunto de tecnologas ADO.NET quepermiten el desarrollo de aplicaciones orientadas a datos. Brinda una experiencia de accesofuertemente tipada sobre base de datos relacionales. Mueve datos desde el modelo de alma-
cenamiento o lgico (las estructuras fsicas de las tablas relacionales) al modelo conceptual(que reeja los objetos de negocio). Introduce Entity Data Model a ADO.NET [4]. SoportaLINQ to Entities. Permite que los programadores trabajen:
con datos en forma de objetos y propiedades especcos del dominio; por ejemplo,con clientes y direcciones, sin tener que pensar en las tablas y columnas de las bases en lasque se almacenan sino que consultan las entidades y relaciones en el modelo de dominio(modelo conceptual),
basados en EF para traducir esas operaciones en los comandos especcos del origen.El modelo conceptual, el modelo de almacenamiento y las asignaciones entre los dos se
expresan en esquemas basados en XML y se denen en archivos de extensiones correspon-
dientes: El Conceptual Schema Denition Language (CSDL) dene el modelo conceptual.Es la implementacin de EF del Entity Data Model. La extensin de archivo es .csdl. El StoreSchema Denition Language (SSDL) dene el modelo de almacenamiento. La extensin dearchivo es .ssdl. El Mapping Specication Language (MSL) dene las asignaciones entre losmodelos conceptual y de almacenamiento. La extensin de archivo es .msl.
Estos modelos y archivos de asignacin permiten a EF transformar las operaciones decreacin, lectura, actualizacin y eliminacin de las entidades y relaciones del modelo con-ceptual en las operaciones equivalentes en el origen de datos [4].
A continuacin se muestra un ejemplo de cmo se pueden consultar tanto entidadescomo asociaciones [5].
5/21/2018 capitulo9
7/76
559
TallerdeFormacin.NET
ADO.NET Sync Services. Es un proveedor incluido en el Microsoft Sync Framework y seutiliza para implementar sincronizacin en bases de datos embebidas en ADO.NET.
Language Integrated Query (LINQ). Brinda libreras para extender C# y Visual Basic conlenguaje nativo para consultas. Es, primero que nada, una tecnologa de consultas soportada
por diferentes assemblies a travs del .NET Framework, por ejemplo: LINQ to Entities est incluido en los assemblies ADO.NET Entity Framework. LINQ to XML est incluido en los assemblies System.Xml. LINQ to Objects est incluido en .NET Framework core system assemblies.Las consultas pueden ser ejecutadas para diferentes formatos, entre ellos: DataSet (LINQ to DataSet). XML (LINQ to XML). objetos de memoria (LINQ to Objects). ADO.NET Data Services (LINQ to Data Services). datos relacionales (LINQ to Entities). LINQ to SQL brinda una solucin a consultas fuertemente tipada para SQL Server.Todas las operaciones de consulta LINQ se componen de tres acciones distintas.[6] Obtencin del origen de datos. Creacin de la consulta. Ejecucin de la consulta.
5/21/2018 capitulo9
8/76
560
TallerdeFormacin.N
ET
5.1.1 Escenarios de uso de aplicaciones
La siguiente gua pretende ser til al momento de mapear escenarios de uso de aplicacio-nes con las soluciones tecnolgicas de acceso a datos disponibles. ADO.NET Entity Fra-mework (EF). Si se desea:
crear un modelo de datos y mapearlo a una base de datos relacional, mapear una clase a mltiples tablas usando herencia, realizar consultas relacionales a almacenes que no sean de la familia Microsoft SQL
Server.EF es apropiado cuando se tiene un modelo de objetos y se necesita mapear a un modelo
relacional usando un esquema exible, y se necesita la exibilidad de separar el esquema ma-peado del modelo de objetos. Si se usa EF considerar usar:LINQ to Entities: si es necesario, realizar consultas sobre las entidades fuertemente tipadas. ejecutar consultas sobre los datos relacionales usando sintaxis LINQ.ADO.NET Data Services Framework. Esta construido sobre EF y permite exponer parte
del modelo entidad mediante una interfaz REST (URIs).Considerar su uso si se est desarrollando un RIA o una aplicacin cliente en N-capas y
se desea acceder a datos mediante una interfaz centralizada de recursos.ADO.NET Core. Considerarla si se necesita o desea: Usar una API de bajo nivel para mayor control sobre los datos. Aprovechar lo existente y convertirse en proveedores de ADO.NET. Se est utilizando un acceso lgico a la base de datos.Es apropiado si no se necesita de las funcionalidades que ofrecen las otras tecnologas
de acceso a datos o se est implementando una aplicacin que debe soportar experiencia deacceso a datos sin conexin.
ADO.NET Sync Services. Considerarla si se est diseando una aplicacin que: Debe soportar eventuales escenarios de conexin. Requiere colaboracin entre bases de datos.
Windows Mobile, para el sincronizado contra una base de datos centralizada.LINQ to Data Services. Si se: utilizan datos en el cliente que retornan de ADO.NET Data Services, desean realizar consultas usando sintaxis.LINQ desde el cliente o va REST. LINQ to DataSets. Si se desea: ejecutar consultas sobre un DataSet, incluyendo consultas que realicen joins de tablas; usar un lenguaje de consultas comn en vez de cdigo iterativo.LINQ to Entities. Si se est utilizando: ADO.NET Entity Framework.
Consultas sobre entidades fuertemente tipadas.
La eleccin de una apropiada tecnologa de acceso a datos debetomar en cuenta el tipo de datos y cmo se manipularn. Ciertastecnologas son mejores para determinados escenarios.
5/21/2018 capitulo9
9/76
561
TallerdeFormacin.NET
consultas sobre datos relacionales usando sintaxis LINQ. LINQ to Objects. Consultassobre:
una coleccin, directorio de archivos, objetos en memoria usando sintaxis LINQ.
LINQ to SQL.LINQ to Entities es la solucin recomendada para utilizar LINQ en escenarios con una
base de datos relacional. Si bien LINQ to SQL seguir con soporte no ser el foco de inno-vacin o mejoras. Si ya se est utilizando LINQ to SQL se puede seguir usando. Para nuevassoluciones considerar el uso de LINQ to Entities en su lugar.
LINQ to XML.Si se utilizan datos XML y se desea utilizar sintaxis LINQ para ejecutar consultas.
5.1.2 Benecios y consideraciones de cada tecnologa
Acceso a datos Objeto-Relacional
ADO.NET Entity Framework (EF)
Benecios
Desacopla la estructura de datos del modelo de datos lgico. Entity SQL brinda un len-guaje consistente sobre todas las fuentes de datos y tipos de base de datos.
Separa la metadata en capas de la arquitectura bien denidas. Brinda a los desarrolladores
de la capa de negocios acceso a los datos sin necesidad de conocer particularidades (especi-caciones) de la base de datos. Permite que el modelo sea mapeado a otras bases de datos.
Consideraciones
Requiere un cambio en el diseo de entidades y consultas si se trabajaba con un mtodotradicional.
Tiene ms niveles de abstraccin que LINQ to DataSet.Se puede usar sin LINQ.
Si la estructura de la base de datos cambia, es necesario regenerar el Entity Data Model yre-deployar las libreras del EF.
LINQ to Entities
Benecios
Una solucin basada en LINQ para datos relacionales en el ADO.NET Entity Framework.Brinda acceso LINQ fuertemente tipado.El procesamiento se realiza del lado del servidor.Consideraciones
Requiere ADO.NET Entity Framework.LINQ to SQLBenecios
5/21/2018 capitulo9
10/76
562
TallerdeFormacin.N
ET
Lectura y escritura de modelo de datos como objetos cuando estos modelos coinciden.Brinda acceso LINQ fuertemente tipado. Procesamiento del lado del servidor.
ConsideracionesEn .NET Entity Framework 4.0 se mapean consultas LINQ directamente a la base de
datos en lugar de un provider.Trabaja solo con Microsoft SQL Server.Acceso a datos sin conexin.
LINQ to DataSet
Benecios
Permite realizar todo tipo de consultas sobre un DataSet.ConsideracionesTodo el procesamiento se da en el cliente.
ADO.NET Sync Services
Benecios
Brinda sincronizacin entre bases de datos, escenarios de colaboracin y sin conexin.La sincronizacin puede ejecutar en background.ConsideracionesHay que implementar el traqueo de cambios.Las grandes cantidades de datos pueden degradar notoriamente la performance.
SOA/Services
ADO.NET Data Services Framework
Benecios
Los datos pueden ser accedidos directamente mediante una URI usando un esquemaREST y retornados tanto en formato Atom o JSON.
El .NET Framework, Silverlight y las bibliotecas de cliente AJAX permiten trabajar di-rectamente con objetos dando acceso LINQ a ADO.NET Data Services, as como una APIpara Windows Azure Tables, SQL Data Services, etc.
ConsideracionesIdeado para escenarios orientados a servicios.
LINQ to Data Services
Benecios
Permite crear consultas LINQ del lado del cliente y los datos se retornan de ADO.NETData Services.
Soporta consultas LINQ sobre datos REST.ConsideracionesRequiere ADO.NET Data Services del lado del cliente.
N-capas y genricasADO.NET Core
Benecios
5/21/2018 capitulo9
11/76
563
TallerdeFormacin.NET
Incluye cdigo manejado de proveedores para acceder a varios almacenes de datos.Brinda facilidades para manipulacin de datos.Consideraciones
El cdigo se escribe directamente para determinados proveedores, reduciendo la reusabi-lidad. La estructura de la base de datos puede implicar la creacin de un modelo nuevo.
LINQ to Objects
Benecios
Permite crear consultas LINQ sobre objetos en memoria.Puede ser utilizado: Sobre cualquier coleccin que soporte IEnumerable o
IEnumerable. Para consultar strings, metadata basada en reection y directorio de ar-chivos.
ConsideracionesSoporte para objetos que implementen IEnumerable.
LINQ to XML
Benecios
Permite crear consultas LINQ sobre datos XML.Se compara con Document Object Model (DOM).
ConsideracionesNo est optimizado para dar soporte a seguridad.
5.1.3 Consideraciones generales. Si se necesita o se est buscando mxima Flexibili-
dad y Performance, considerar usar ADO.NET Core.
Una solucin basada en O/RM o con soporte a mltiples bases de datos, considerar elEntity Framework,
escenarios sin conexin, considerar usar DataSets o el Sync Framework.Un escenario N-capas donde: los datos pasen entre las capas, Data Transfer Objects (DTO), centralizar recursos (REST), ADO.NET Data Services, centralizar operaciones (SOAP), Windows Comunication Fundation (WCF).
SOA Exponiendo la base de datos como un servicio, ADO.NET Data Services, almacenando la informacin en la nube, SQL Data Services.Microsoft Windows Mobile, considerar la base de datos SQL Server Compact Edition y
ADO.NET Sync Services para mantener la informacin en el dispositivo mvil y sincroni-zarla con un mecanismo basado en el servidor.
5/21/2018 capitulo9
12/76
564
TallerdeFormacin.N
ET
5.2 Paso 2 Seleccionar como recuperar y persistir objetos de negocio desde un al-
macn de datos
Luego de identicar los requerimientos de la fuente de datos, el prximo paso consiste enseleccionar la estrategia para poblar los objetos o entidades de negocio desde los almacenes
de datos y persistirlos en las fuentes de datos. El enfoque ms comn usa herramientas oframeworks Object/Relational Mapping (O/RM). Al momento de mapear esas entidades aestructuras de datos, el principal factor para decidir cmo realizar ese mapeo es el tipo deentidades que utiliza la aplicacin.
5.3 Paso 3 Determinar cmo conectarse a la fuente de datos
Una vez que se tiene el mapeo, es necesario identicar como conectarse a la fuente dedatos, proteger las credenciales de los usuarios y realizar transacciones. A continuacin, se
muestran los principales puntos a considerar (cada uno incluye varias consideraciones paralograr el enfoque adecuado).
5.3.1 Conexiones
Conexiones a fuentes de datos son una parte fundamental de la capa de datos. Debe coor-dinar todas las conexiones a la fuente de datos. Asegurarse de abrir las conexiones a la fuentede datos tan tarde como sea posible y se cierran tan pronto como sea posible. De esta forma,se asegura que el bloqueo sobre recursos es tan corto como sea posible y se queda libre paraotro proceso. Si no se tienen datos voltiles, usar concurrencia optimista para mitigar el cos-to de bloquear datos en la base (evitando overhead). Realizar transacciones a travs de unaconexin cuando sea posible. Esto permite caractersticas de ADO.NET sin la necesidad deservicios coordinadores de transacciones distribuidas. Si se usa un pool, realizar una pruebade carga con escenarios simultneos y tunear la performance basado en los resultados. Porrazones de seguridad, evitar el uso de System o User Data Source Name (DSN) para alma-cenar la informacin de conexin. Disear la lgica de re-intento para manejar situacionesdonde la conexin a la fuente de datos se pierda o de time-out. Ejecutar comandos por lotes(batch) en la base de datos, en la medida que sea posible, para evitar trco excesivo (idasy vueltas).
Otro aspecto importante a considerar son los requerimientos de seguridad para accedera la fuente de datos. En otras palabras: cmo se autenticarn los componentes de acceso adatos con la fuente de datos? Y cules son los requerimientos de seguridad? Preferible Au-tenticacin Windows que SQL Server.
Si se utiliza Microsoft SQL Server considerar utilizar autenticacin Windows con sub-sistema conable.
5.3.2 Pooles de Conexin
Los pooles de conexin permiten que aplicaciones vuelvan a usar conexiones de un pool,o crear una nueva y agregarla al pool si no hay una conexin disponible. Cuando una aplica-cin cierra la conexin esta se devuelve al pool, pero la conexin permanece abierta. Esto
5/21/2018 capitulo9
13/76
565
TallerdeFormacin.NET
signica que ADO.NET no necesita crear una nueva conexin y abrirla contra la fuente dedatos todo el tiempo. Si bien consumen recursos, reducen los delays asociados al acceso adatos y hacen que las aplicaciones corran ms ecientes cuando hay conexiones disponibles.
5.3.3 Transacciones y concurrencia
Considerar formar transacciones con las operaciones crticas para el negocio.En general, se pueden seleccionar entre tres tipos de transacciones: System.Transactions
namespace classes, brindadas como parte del .NET Framework con soporte a transaccionesimplcitas y explicitas. Considerar su uso si se est desarrollando una aplicacin nueva querequiera soporte de transacciones. Para la mayora de las transacciones, el enfoque recomen-dado es usar el modelo implcito que brinda el objeto TransactionScope en el namespaceSystem.Transaction. Si bien no son tan rpidas como las manuales, o explicitas, son msfciles de desarrollar y se logran soluciones exibles y mantenibles. ADO.NET Transactionsbasadas en una conexin simple. Este es el enfoque ms eciente para transacciones con-
troladas por clientes en un nico almacn de datos. Considerar su uso si se est extendiendouna aplicacin que ya utilizaba esta tecnologa o se est desarrollando para un entorno queno soporte la versin 2.0 del Framework .NET T-SQL (Database) Transactions controladaspor comandos ejecutados en la base de datos. Son ms ecientes para transacciones contro-ladas por el servidor en un nico almacn de datos, donde la base de datos gestiona toda latransaccin. Considerar esta tecnologa en el desarrollo de stored procedures que encapsulantodos los cambios que debe manejar la transaccin o que usan varias aplicaciones, y los re-querimientos de la transaccin se pueden encapsular en l.
5.4 Paso 4 Determinar la estrategia para manejo de errores en el acceso a fuentes
de datos
No deberan pasar para otra capa, salvo que afecten a la aplicacin o alguna funcionalidad.
5.5 Paso 5 Disear Service Agent Objetcts (opcional)
Objetos que manejan la semntica de comunicacin con servicios externos.
6 Bibliografa
Microsoft, Microsoft Application Architecture Guide, 2nd Edition. Patterns & Practices,2009.
Sitio Web de la MSDN. [Online]. Available: http://msdn.microsoft.com. [Accessed: 01-Oct-2011].
Tutorial rpido (Entity Framework) [Online]. Available: http://msdn.microsoft.com/es-es/library/bb399182.aspx [Accessed: 5-Aug-2011].
Informacin general de Entity Framework [Online]. Available: http://msdn.microsoft.com/es-es/library/bb399567.aspx [Accessed: 5-Aug-2011].
Consultar entidades y asociaciones. [Online]. Available: http://msdn.microsoft.com/es-es/library/bb386884.aspx [Accessed: 22-Aug-2011].
Introduccin a las consultas LINQ. [Online]. Available: http://msdn.microsoft.com/es-es/library/bb397906.aspx [Accessed: 1-Jul-2011].
5/21/2018 capitulo9
14/76
566
TallerdeFormacin.N
ET
WindowsCommunication
Foundation
Qu es Windows Comunication Foundation (WCF)
El uso global de Web Services ha cambiado la forma en que se desarrollan las aplicaciones.Por ejemplo, las funciones que los Web Services proveen en la actualidad incluyen: se-
guridad, coordinacin de transacciones distribuidas y comunicaciones conables. WindowsCommunication Foundation (WCF) esta diseado para ofrecer un enfoque administrable ala computacin distribuida, la interoperabilidad y, en denitiva, la arquitectura orientada aservicios.
En otras palabras Windows Communication Foundation (WCF) es un framework1para lacreacin de aplicaciones basadas en servicios. Utilizando WCF se puede enviar informacincomo mensajes asncronos desde un lugar a otro. Este lugar se denomina endpoint. Unendpoint son lugares donde los mensajes son enviados o recibidos (o ambos) y denen todala informacin necesaria para el intercambio de mensajes. Un endpoint puede ser parte deun servicio alojado en el Internet Information Server (IIS) o puede ser un servicio alojadoen una aplicacin. Un endpoint puede ser un cliente de un servicio que solicita informacina otro endpoint. Los mensajes pueden ser tan simples como un nico carcter o palabraenviado como un XML o tan complejos como una secuencia de datos binarios. Algunos
escenarios de ejemplo pueden ser los siguientes: Un servicio de seguridad que procesa transacciones bancarias. Un servicio que provee informacin a otros servicios, como ser reportes de trco o
algn otro servicio de monitoreo. Un servicio de chat que permite a dos personas comunicarse o intercambiar informa-
cin en tiempo real. La inclusin de esta tecnologa no implica que antes de su existencia nose podan desarrollar este tipo de servicios, todo lo contrario, pero WCF hace que el desarro-llo de los endpoints sea mucho ms sencillo.
En resumen, WCF esta diseado para ofrecer un enfoque ms sencillo a la creacin de
Web Services (servicios web) y clientes de Web Services.
Ejemplo ilustrativo de la utilizacin de WCF
El siguiente ejemplo ilustra algunos de los problemas que WCF aborda. Una compaa derenta de autos decide crear una nueva aplicacin de reservas. Los diseadores de esta nuevaaplicacin saben que la lgica de negocio debe ser accedida por otras aplicaciones ejecutadas
1 En el desarrollo de software, un framework o infraestructura digital, es una estructura conceptual y tecnolgica de soportedenido, normalmente con artefactos o mdulos de software concretos, con base a la cual otro proyecto de software puedeser ms fcilmente organizado y desarrollado.
5/21/2018 capitulo9
15/76
567
TallerdeFormacin.NET
dentro y afuera de la compaa. En consecuencia, deciden disear una arquitectura orientadaa servicios, con la lgica de la aplicacin expuesta a travs de un conjunto bien denido deservicios.
Los diseadores saben que, al momento de crear la aplicacin, la misma ser accedida por,al menos, otras tres aplicaciones.
1. Una aplicacin cliente de call center que se ejecuta en mquinas cuyo sistema ope-rativo es Windows y es usada por empleados dentro de la organizacin. Esta aplicacin sercreada especialmente para el nuevo sistema de reserva y usar tambin el framework .NETy WCF.
2. Una aplicacin existente de reservas hecha en J2EE ejecutando en un servidor Win-dows dentro de la compaa. Debido a una reciente asociacin con otra rma de renta deautos la aplicacin existente debe poder acceder a la lgica de la nueva aplicacin y proveer alos clientes una experiencia unicada.
3. Aplicaciones de rmas de socios ejecutando en un conjunto variado de plataformas,esto incluye: agencias de viaje, aerolneas y cualquier compaa que tenga la necesidad decrear reservas de renta de autos.
Este es un escenario perfectamente realista y representa algunos desafos. Para la interac-cin con el Call Center, por ejemplo, la velocidad de respuesta es importante, mientras que lainteroperabilidad es directa (comunicacin .NET a .NET).
Para la comunicacin con la aplicacin existente de reservas hecha en J2EE o las aplica-ciones de las rmas socios, la interoperabilidad se convierte en el objetivo primario.
Los requerimientos de seguridad son tambin muy diferentes, desde una comunicacinentre mquinas en una intranet Windows (Active Directory) a mquinas ejecutando en lu-gares remotos en otros sistemas operativos. WCF esta diseado para abordar ste y otrosescenarios diversos pero realistas.
5/21/2018 capitulo9
16/76
568
TallerdeFormacin.N
ET
Arquitectura de una aplicacin tpica WCF
Arquitectura tpica de una aplicacin empresarial, mostrando la capa de servicios.La capa de servicios comnmente debe incluir:
Interfaz de servicios. El servicio expone una interfaz donde los mensajes entrantes sonenviados. La interfaz de servicios se puede pensar como una fachada que expone la lgica denegocio implementada en la aplicacin.
Tipos de mensajes. Cuando se intercambian datos a travs de la capa de servicios las es-tructuras de datos son empaquetados en mensajes que soportan distintos tipos de operacin.La capa de servicios, tpicamente, va a denir tipos de datos y contratos que se usan en los
mensajes.
Comenzar a trabajar con WCF
A lo largo de este documento vamos a repasar ordenadamente los pasos que se necesitanpara crear aplicacines WCF y sus clientes.
Un servicio es una entidad que expone uno o mas endpoints cada uno de los cualesexpone una o ms operaciones de servicio. El endpoint de un servicio especica la direccin(Address) donde el servicio puede ser ubicado, un elemento (Binding) que indica el tipo de
comunicacin que se va a establecer y un contrato (Contract) que dene la funcionalidad queprovee el servicio a sus clientes.
5/21/2018 capitulo9
17/76
569
TallerdeFormacin.NET
Esto es comnmente llamado el ABC: Address Binding Contract
Veamos ahora cmo denir un servicio WCF con un contrato, cmo implementar elservicio, cmo congurarlo y, por ltimo, cmo ejecutarlo. Esto se desarrollar en seis pasos.
1. Cmo denir un contrato de un servicio WCF
Cuando se crea un servicio bsico en WCF la primera tarea es denir el contrato. El con-trato especica cules operaciones tendr el servicio. Los contratos son creados deniendouna interfaz en C++, C# o Visual Basic. Cada mtodo en la interfaz corresponde a unaoperacin especca del servicio. Cada interfaz debe contener el atributo ServiceContrac-
tAttribute y cada operacin debe contener el atributo OperationContractAttribute. Si unmtodo dentro de una interfaz no contiene el atributo antes mencionado, dicho mtodo noser expuesto por el servicio.
Los pasos para la creacin del contrato son los siguientes:
1. Abra Visual Studio 2010 como administrador haciendo clic con el botn secundarioen el programa en el men Inicio y seleccionando Ejecutar como Administrador.
2. Cree un nuevo proyecto de aplicacin de consola. Haga clic en el men Archivo yseleccione Nuevo, Proyecto. En el cuadro de dilogo Nuevo proyecto, seleccione Visual C#.
Elija la plantilla Aplicacin de consola y denomnela Service. Use la ubicacin predetermi-nada.3. En un proyecto, Visual Studio crea un archivo denominado Program.cs. Esta clase
contendr un mtodo vaco denominado Main().4. Cambie el espacio de nombres (namespace) Service predeterminado a Microsoft.Ser-
viceModel.Samples. Para ello, haga clic con el botn secundario en el proyecto en el Explo-rador de soluciones y seleccione Propiedades. Asegrese de que est seleccionada la pestaaAplicacin situada a la izquierda del cuadro de dilogo Propiedades. Luego, escriba Micro-soft.ServiceModel.Samples en el cuadro de edicin que tiene la etiqueta Espacio de nombrespredeterminado. Haga clic en el men Archivo y seleccione Guardar todo para guardar loscambios.
5. Luego, cambie el espacio de nombres en el archivo Program.cs generado a Microsoft.
ServiceModel.Samples como se muestra en el siguiente ejemplo:
5/21/2018 capitulo9
18/76
570
TallerdeFormacin.N
ET
6. Agregue una referencia a System.ServiceModel.dll al proyecto.a. En el Explorador de soluciones, haga clic con el botn secundario en la carpeta Refe-
rencias bajo la carpeta del proyecto y elija Agregar referencia.b. Seleccione la pestaa .NET en el cuadro de dilogo Agregar referencia y desplcese
hacia abajo hasta que vea System.ServiceModel (versin 4.0.0.0), seleccinelo y haga clic en
Aceptar.7. Agregue una instruccin using para el espacio de nombres System.ServiceModel.usingSystem.ServiceModel.
8. Dena una nueva interfaz denominada ICalculator y aplique el atributo ServiceCon-tractAttribute a la interfaz con un valor de Namespace de http://Microsoft.ServiceModel.Samples. Especicar el espacio de nombres explcitamente es un procedimiento recomen-dado porque evita que el valor de espacio de nombres predeterminado se agregue al nombredel contrato.
9. Declare un mtodo para cada una de las operaciones que el contrato ICalculator ex-pone (suma, resta, multiplicacin y divisin) dentro de la interfaz y aplique el atributo Ope-rationContractAttribute a cada mtodo que desee exponer como parte del contrato pblicode WCF.
El siguiente cdigo unicar el resultado obtenido al realizar cada uno de los pasos deta-llados anteriormente:
5/21/2018 capitulo9
19/76
571
TallerdeFormacin.NET
2. Cmo implementar un contrato de servicio de Windows Communica-
tion Foundation
sta es la segunda de las seis tareas que son necesarias para crear un servicio bsico enWindows Communication Foundation (WCF) y un cliente que llame al servicio.
La creacin de un servicio WCF requiere que se cree primero el contrato, que se de-ne mediante una interfaz, esta tarea fue realizada en la seccin anterior. El siguiente paso,mostrado en este ejemplo, es implementar la interfaz. Esto implica la creacin de una clasedenominada CalculatorService que implemente la interfaz ICalculator denida por el usuario.
Los pasos para la implementacin de la interfaz son los siguientes:1. Cree una nueva clase denominada CalculatorService en el mismo archivo donde deni
la interfaz ICalculator. CalculatorService implementa la interfaz ICalculator.public class CalculatorService: ICalculator
2. Implemente cada mtodo denido en la interfaz ICalculator dentro de la clase Calcu-latorService.
El siguiente ejemplo de cdigo muestra la interfaz que dene el contrato de servicio yla implementacin de la interfaz. Es decir, se despliega tanto el cdigo escrito en la seccinanterior como en la presente:
5/21/2018 capitulo9
20/76
572
TallerdeFormacin.N
ET
Ahora, el contrato de servicio se ha creado e implementado. Compile la solucin para ase-gurarse de que no hay ningn error de compilacin y, a continuacin, contine en Procedi-miento para hospedar y ejecutar un servicio bsico de Windows Communication Foundationpara ejecutar el servicio.
Para compilar el cdigo dirjase al men Generar, haga clic en Generar solucin.
5/21/2018 capitulo9
21/76
573
TallerdeFormacin.NET
3. Procedimiento para hospedar y ejecutar un servicio bsico de Win-
dows Communication Foundation
sta es la tercera de las seis tareas necesarias para crear un servicio Windows Communi-cation Foundation (WCF) bsico y un cliente que pueda llamar al servicio.
En este tema se describe cmo ejecutar un servicio bsico de Windows CommunicationFoundation (WCF). Este procedimiento consta de los siguientes pasos:
Crear una direccin base para el servicio. Crear un host del servicio para el servicio. Habilitar el intercambio de metadatos. Abrir el host del servicio.En el ejemplo que se ofrece despus del procedimiento se proporciona una lista completa
del cdigo escrito en esta tarea. Agregue el cdigo siguiente al mtodo Main() denido en laclase Program. Esta clase se gener al crear la solucin Service.
Conguracin de una direccin base para el servicio
1. Cree una instancia de Uri para la direccin base del servicio. Este identicador URIespecica el esquema HTTP, su equipo local, el nmero de puerto 8000 y la ruta de accesoServiceModelSample/Service correspondiente al servicio que se especic para el espacio denombres del servicio del contrato.
Para hospedar el servicio
1. Importe el espacio de nombres System.ServiceModel.Description. Esta lnea de cdigose debera colocar en la parte superior del archivo Program.cs con el resto de las instruccio-nes using o imports.
2. Cree una nueva instancia de ServiceHost para hospedar el servicio. Debe especicar eltipo que implementa el contrato de servicios y la direccin base. En este ejemplo, la direccinbase es http://localhost:8000/ServiceModelSamples/Service y Calculator. Service es el tipoque implementa el contrato de servicio.
3. Agregue una instruccin try-catch que detecte una CommunicationException y agre-gue el cdigo en los tres pasos siguientes al bloqueo de intentos. La clusula catch deberamostrar un mensaje de error y, a continuacin, llamar a selfHost.Abort().
5/21/2018 capitulo9
22/76
574
TallerdeFormacin.N
ET
4. Agregue un endpoint que exponga el servicio. Para ello, debe especicar el contrato queel endpoint est exponiendo, un enlace y la direccin del endpoint. Para obtener este ejemplo,especique ICalculator como el contrato, WSHttpBinding como el enlace y CalculatorSer-vice como la direccin. Observe que la direccin del endpoint es una direccin relativa. Ladireccin completa del endpoint es la combinacin de la direccin base y la direccin del en-dpoint. En este caso la direccin completa es http://localhost:8000/ServiceModelSamples/Service/CalculatorService.
5. Habilite el intercambio de metadatos. Para ello, agregue un comportamiento de me-tadatos de servicio. Primero, cree una instancia de ServiceMetadataBehavior, establezca lapropiedad HttpGetEnabled en true y, a continuacin, agregue el nuevo comportamiento alservicio.2
6. Abra el ServiceHost y espere a los mensajes entrantes. Cuando el usuario presione latecla Entrar, cierre el ServiceHost.
2Para obtener ms informacin sobre los problemas de seguridad al publicar metadatos, vea Security Considerations withMetadata.
5/21/2018 capitulo9
23/76
575
TallerdeFormacin.NET
Para comprobar si el servicio funciona
1. Ejecute service.exe desde dentro de Visual Studio. Al ejecutarse en Windows Vista, elservicio se debe ejecutar con privilegios de administrador. Dado que Visual Studio se ejecutcon privilegios de administrador, service.exe tambin se ejecuta con dichos privilegios. Tam-
bin puede iniciar un nuevo smbolo del sistema con privilegios de administrador y ejecutarservice.exe desde all.
2. Abra Internet Explorer y vaya a la pgina de depuracin del servicio en http://local-host:8000/ServiceModelSamples/Service.
El siguiente ejemplo incluye la implementacin de los pasos anteriores del tutorial y hos-peda el servicio en una aplicacin de consola.
4. Creacin de un cliente de Windows Communication Foundation
sta es la cuarta de las seis tareas que son necesarias para crear un servicio de WindowsCommunication Foundation (WCF) bsico y un cliente que puede llamar al servicio.
En este tema se describe cmo se pueden recuperar metadatos desde un servicio WCF yusarlos para crear un proxy WCF que pueda obtener acceso al servicio. Esta tarea se comple-
ta con ayuda de la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) queWCF proporciona. Esta herramienta obtiene los metadatos del servicio y genera un archivode cdigo fuente administrado para un proxy en el lenguaje elegido. Adems de crear el proxy
5/21/2018 capitulo9
24/76
576
TallerdeFormacin.N
ET
de cliente, la herramienta tambin crea el archivo de conguracin para el cliente que permiteque la aplicacin cliente se conecte al servicio en uno de sus endpoints.
Creacin de un cliente de Windows Communication Foundation
1. Siga estos pasos para crear en la solucin actual un nuevo proyecto para el cliente enVisual Studio 2010:
a. En el Explorador de soluciones (en la esquina superior derecha) de la misma solucinque contiene el servicio, haga clic con el botn secundario en la solucin actual (no el proyec-to) y seleccione Agregar y, a continuacin, Nuevo proyecto.
b. En el cuadro de dilogo Agregar nuevo proyecto, seleccione Visual C# y elija la plantillaAplicacin de consola y denomnela Cliente. Utilice la ubicacin predeterminada.
c. Haga clic en Aceptar.2. Agregue una referencia a System.ServiceModel.dll para el proyecto.
3. Agregue una instruccin using para el espacio de nombres System.ServiceModel en elarchivo Program.cs generado.4. En Visual Studio, presione la tecla F5 para iniciar el servicio creado en el tema anterior.5. Ejecute la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) con los
modicadores adecuados para crear el cdigo de cliente y un archivo de conguracin reali-zando los siguientes pasos:
a. En el men Inicio, haga clic en Todos los programas y, a continuacin, en Visual Studio2010. Haga clic en Visual Studio Tools y, a continuacin, en Smbolo del sistema de VisualStudio 2010.
b. Explore hasta el directorio donde desea colocar el cdigo de cliente.Si cre el proyecto de cliente con la conguracin predeterminada, el directorio es C:\
Users\\My Documents\Visual Studio 10\Projects\Service\Client.c. Utilice la herramienta de lnea de comandos Herramienta de utilidad de metadatos de
ServiceModel (Svcutil.exe) con los modicadores adecuados para crear el cdigo de cliente.El siguiente ejemplo genera un archivo de cdigo y un archivo de conguracin para el ser-vicio.
De forma predeterminada, el cdigo de proxy de cliente se genera en un archivo con nom-
bre despus del servicio (en este caso, por ejemplo, CalculatorService.cs) con una extensinadecuada al lenguaje de programacin: .cs para C#. El modicador /out cambia el nombredel archivo proxy de cliente a GeneratedProxy.cs. El modicador /cong cambia el nombrepredeterminado del archivo de conguracin de cliente, Output.cong, por App.cong.
Observe que los dos archivos se generan en el directorio C:\Users\\My Documents\Visual Studio 10\Projects\Service\Client.
6. Agregue el proxy generado al proyecto de cliente en Visual Studio, haga clic con el bo-tn secundario en el proyecto de cliente en el Explorador de soluciones y seleccione Agregary Elemento existente. Seleccione el archivo generatedProxy generado en el paso anterior.
Ahora ha creado un cliente Windows Communication Foundation (WCF).
5/21/2018 capitulo9
25/76
577
TallerdeFormacin.NET
5. Conguracin de un cliente bsico de Windows Communication
Foundation
sta es la quinta de las seis tareas necesarias para crear un servicio de Windows Commu-nication Foundation (WCF) bsico y un cliente que pueda llamar al servicio.
En este tema se agrega el archivo de conguracin del cliente generado mediante la He-rramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) en el proyecto del clientey se explica el contenido de los elementos de conguracin del cliente. La conguracin delcliente consiste en especicar el endpoint que utiliza el cliente para obtener acceso al servicio.
Un endpoint tiene una direccin, un enlace y un contrato, y cada uno de estos elementosdebe especicarse en el proceso de conguracin del cliente.
Conguracin de un cliente de Windows Communication Foundation
1. Agregue el archivo de conguracin App.cong generado en la seccin anterior al pro-yecto del cliente en Visual Studio. Haga clic con el botn secundario en el proyecto de clienteen el Explorador de soluciones, seleccione Agregar y, a continuacin, Elemento existente.A continuacin, seleccione el archivo de conguracin App.cong en el directorio desde elque ejecut SvcUtil.exe en el paso anterior. (El archivo se llama App.cong porque se usel modicador /cong:app.cong al generarlo con la herramienta Svcutil.exe.) Haga clic enAceptar. De forma predeterminada, el ltro del cuadro de dilogo Agregar elemento exis-tente descarta todos los archivos con extensin .cong. Para ver estos archivos, seleccioneTodos los archivos (*.*) en el cuadro de lista desplegable situado en la esquina inferior dere-
cha del cuadro de dilogo.Agregar elemento existente.
2. Abra el archivo de conguracin generado. Svcutil.exe genera valores para cada ajustedel enlace. El siguiente ejemplo es una vista del archivo de conguracin generado.
Bajo la seccin , busque el elemento . El siguiente
archivo de conguracin es una versin simplicada del archivo generado.Este ejemplo congura el endpoint que utiliza el cliente para tener acceso al servicio que
se ubica en la siguiente direccin: http://localhost:8000/ServiceModelSamples/service.El elemento de endpoint especica que el contrato Microsoft.ServiceModel.Samples.
ICalculator se utiliza para la comunicacin que est congurada con el WsHttpBinding pro-
5/21/2018 capitulo9
26/76
578
TallerdeFormacin.N
ET
porcionado por sistema. Este enlace especica HTTP como el transporte, la seguridad inte-roperable y otros detalles de conguracin.
Ahora se ha congurado el cliente.
6. Cmo usar un cliente de Windows Communication Foundation
Esta es la ltima de las seis tareas necesarias para crear un servicio de Windows Commu-nication Foundation (WCF) bsico y un cliente que pueda llamar al servicio.
Una vez creado y congurado un proxy de Windows Communication Foundation (WCF)se puede crear una instancia de cliente, y la aplicacin de cliente se puede compilar y utilizarpara comunicar con el servicio WCF. En este tema se describen los procedimientos paracrear y utilizar un cliente de WCF. Este procedimiento hace tres cosas:
1. Crea un cliente WCF.2. Llama a las operaciones de servicio desde el proxy generado.
3. Cierra el cliente una vez completada la llamada de operacin. El cdigo de esta tarea sedebera colocar en el mtodo Main() de la clase Program generada en el proyecto de cliente.
Uso de un cliente de Windows Communication Foundation
Asegrese de que el servicio se est ejecutando antes de intentar utilizar el cliente.
5/21/2018 capitulo9
27/76
579
TallerdeFormacin.NET
Para ejecutar el cliente, haga clic con el botn secundario en Cliente en el Explorador desoluciones y elija Depurar, Iniciar nueva instancia.
Bibliografa
Application Architecture Guide v2apparchguide.codeplex.com/What is Windows Communication Foundation? Framework 3.5 [Online]http://msdn.microsoft.com/en-us/library/ms731082(v=vs.90).aspxWhat is Windows Communication Foundation? Framework 4.0 [Online]http://msdn.microsoft.com/en-us/library/ms731082.aspxGetting Started Tutorial [Online]http://msdn.microsoft.com/en-us/library/ms734712(v=VS.90).aspx
5/21/2018 capitulo9
28/76
580
TallerdeFormacin.N
ET
ASP.NET MVC
1 Introduccin
ASP.NET MVC es un framework para la construccin y desarrollo de aplicaciones webque aplica el patrn general MVC (Model View Controller) al framework de ASP.NET.
En el ao 2002 se realiz el primer lanzamiento del framework de ASP.NET, y por mu-chos aos fue muy fcil pensar en ASP.NET y Web Forms (una de las tecnologas de pre-sentacin utilizada por ASP.NET) como si fueran realmente la misma cosa. La realidad esque ASP.NET es, en s mismo, un complejo framework extensible para el desarrollo deaplicaciones web.
No fue sino hasta el ao 2007 que se anunci ASP.NET MVC, y ya en ese momento elpatrn MVC se estaba convirtiendo en una de las formas ms utilizadas para la construccinde web frameworks.
1.1 El patrn MVC
Es uno de los patrones arquitectnicos de software ms importantes en la actualidad ylo viene siendo desde hace muchos aos. Es una poderosa y elegante forma de separar losdistintos aspectos concernientes a una aplicacin. Si bien es cierto que agrega una pequeacantidad de complejidad al diseo de una aplicacin, los benecios que otorga hacen que elesfuerzo sea ampliamente recompensado.
El patrn MVC separa la interface de usuario de una aplicacin en tres aspectos princi-pales:
1. El modelo: Un conjunto de clases que describen los datos con los cuales se estn traba-jando, as como tambin las reglas de negocio sobre cmo estos datos pueden ser cambiadosy manejados.
2. La vista: Dene cmo la interface de usuario (UI) ser desplegada.3. El controlador: Un conjunto de clases que maneja la comunicacin del usuario, sobre
todo el ujo de la aplicacin y la lgica especca de la aplicacin.
1.2 El patrn MVC aplicado a Web Frameworks
El patrn MVC se ha vuelto, en los ltimos tiempos, extremadamente popular aplicadoa distintos web frameworks en distintas plataformas de ejecucin. En ASP.NET MVC sepuede mapear de la siguiente forma:
1. Modelo: stas son las clases que representan el dominio en el que se est interesado.Estos objetos de dominio a menudo encapsulan datos almacenados en una base de datos, ascomo tambin el cdigo necesario para la manipulacin de los datos. En ASP.NET MVC setraduce generalmente a una capa de acceso a datos (Data Access Layer) de algn tipo utili-zando alguna herramienta como ser Entity Framework o NHibernate.
2. Vista: Se representa mediante algn template para generar HTML de forma dinmica.Se detallar esto ms adelante.
5/21/2018 capitulo9
29/76
581
TallerdeFormacin.NET
3. Controlador: Es una clase especial que maneja la relacin entre la vista y el modelo. Res-ponde a la entrada del usuario, habla con el modelo y decide qu vista se muestra al usuario,si se muestra alguna. En ASP.NET MVC, por convencin, esta clase se denota mediante elsujo Controller.
Es importante destacar que el patrn MVC es un patrn arquitectnico de alto nivel y su
aplicacin depende mucho de su uso particular. ASP.NET MVC es contextualizado dentrodel problema que quiere resolver, es decir, un ambiente carente de estado (stateless) como loes el ambiente web, y ASP.NET como plataforma subyacente.
2 Creando una aplicacin ASP.NET MVC
Para crear una nueva aplicacin ASP.NET MVC se deben seguir los siguientes pasos: En el Visual Studio 2010, ir al men Archivo Nuevo Proyecto:
En Installed Templates seleccionamos Visual C# Web ASP.NET MVC 3 WebApplication:
5/21/2018 capitulo9
30/76
582
TallerdeFormacin.N
ET
En la siguiente ventana seleccionamos Internet Application:
En la misma ventana, en la parte inferior, tenemos varias opciones:
a. Para elegir el motor con el cual generar las vistas, en nuestro caso, seleccionaremosRazor.b. Una opcin para indicar si se va a utilizar las caractersticas de marcado semntico de
HTML5, la cual marcamos.c. Una ltima opcin para indicar si deseamos crear junto a nuestro proyecto un proyecto
para la realizacin de testeos unitario, la cual vamos a dejar desmarcada en esta ocasin.
Listo, en este momento ya tenemos nuestra primera aplicacin ASP.NET MVC pronta.Solamente nos queda presionar F5 para correrla. Nos aparecer un popup indicando que
est corriendo el ASP.NET Development Server en un puerto aleatorio:
5/21/2018 capitulo9
31/76
583
TallerdeFormacin.NET
Y en el navegador se abrir la pgina principal de nuestra nueva aplicacin:
3 Entendiendo la estructura de la aplicacinASP.NET MVC
Una vez creada la aplicacin podemos observar que en el Visual Studio, debajo de nuestrasolucin, se cre toda una estructura de directorios muy particular:
La siguiente tabla detalla los distintos directorios y su funcin:
5/21/2018 capitulo9
32/76
584
TallerdeFormacin.N
ET
Esta estructura tiene su razn de ser y est enmarcada en algo llamado Convention overConguration, un tema que retomaremos un poco ms adelante, pasando primero a mostraren nuestra aplicacin el contenido creado en cada uno de los distintos directorios, y su fun-cin.
Cuando expandimos el directorio /Controllers, vemos que Visual Studio agreg dos cla-
ses Controller: HomeController y AccountController. El HomeController es el controladorde la pgina principal, el encargado de mostrar la(s) vista(s) principal(es) de nuestra aplicaciny responder a los pedidos que el usuario realice desde all. El AccountController es, por suparte, el encargado de mostrar las vistas correspondientes a lo que es el login de nuestra apli-cacin, as como tambin de realizar las acciones de Login, Crear Usuario, etc.
En el directorio /Views se crearon tres subdirectorios: /Account, /Home y /Shared,as como tambin varios templates (archivos con extensin cshtml) que corresponden a lasdistintas vistas creadas por el proyecto por defecto (Figura 9).
5/21/2018 capitulo9
33/76
585
TallerdeFormacin.NET
En el directorio /Content se encuentra un archivo CSS, Site.css, que es utilizado paraagregar estilos css a todo el sitio. Por su parte, en el directorio /Scripts se agregaron variaslibreras javascript que pueden resultar muy tiles al momento de desarrollar nuestra aplica-cin como ser, por ejemplo, jQuery (Figura 10).
4 ASP.NET MVC y sus convenciones
Todas las aplicaciones ASP.NET MVC se basan fuertemente en convenciones. Esto per-mite que los desarrolladores no tengan que estar congurando y especicando cosas que yapueden ser inferidas basadas en convenciones, es decir, acuerdos sobre distintos aspectoscomo ser nombres, directorios, etc., de nuestra aplicacin.
Por ejemplo, para resolver las vistas, ASP.NET MVC utiliza una convencin basada en losdirectorios de la estructura, lo que permite omitir la localizacin exacta de la vista cuando sereferencia una vista desde un controlador. Por defecto, ASP.NET MVC busca el template de
la vista en el directorio /Views/[Controller Name]/.
4.1 Convention over conguration
El concepto de Convention over conguration se hizo popular gracias a otro frameworkpara el desarrollo de aplicaciones web basado en MVC: Ruby on Rails.
La idea principal es automatizar todas las tareas que sea posible automatizar. De esta for-ma, no se malgasta tiempo en tareas repetitivas en cada desarrollo de una nueva aplicacin.
Este concepto es fcilmente visible en ASP.NET MVC observando la estructura de direc-torios creada en la aplicacin por defecto:
Controllers Models ViewsEstos nombres no necesitan ser congurados en el archivo de conguracin de la aplica-
cin, el archivo web.cong, estos nombres se espera que sean esos, por convencin.Existen varias convenciones en ASP.NET MVC. Por ejemplo, en cuanto a la estructura
podemos destacar: Solamente debe existir un nico directorio para las vistas en la aplicacin, de nombre
Views. Todas las clases de los controladores terminan con Controller (por ejemplo, HomeCon-
troller, ProductosController) y estos se encuentran ubicados en el directorio Controllers. Las vistas que utiliza un controlador determinado se encuentran ubicadas en un subdi-
rectorio del directorio Views, y este es nombrado de acuerdo al nombre del controlador (conexcepcin del sujo Controller). Por ejemplo, las vistas para el controlador ProductosCon-troller se encontrarn en el directorio /Views/Productos/.
5 Desarrollando nuestra aplicacin ASP.NET
MVC
A modo de prctica, vamos a desarrollar una aplicacin muy sencilla que sirva para rea-lizar el ABM (Alta, Baja y Modicacin) de Productos almacenados en una base de datos.
Por simplicidad, vamos a acceder a la base de datos utilizando Linq To SQL.
5/21/2018 capitulo9
34/76
586
TallerdeFormacin.N
ET
5.1 Modelo
En nuestra carpeta de modelos creamos una clase llamada ProductosModels, que va a serla encargada de realizar las operaciones necesarias sobre la base de datos.
La base de datos es muy simple y cuenta con una nica tabla, Productos, con la siguienteestructura:
Para manejar de forma ms sencilla los datos, implementamos una clase, ProductoDTO(DTO: Data Transfer Object, ver referencias). La misma se implementa de la siguiente for-ma:
Ahora nos queda implementar nuestro modelo, ProductosModels, de forma de completarel acceso a los datos.
5/21/2018 capitulo9
35/76
587
TallerdeFormacin.NET
Para ello, por el momento vamos a ofrecer dos mtodos: uno para obtener todos los pro-ductos de la base de datos, y otro para crear un nuevo producto:
Estos mtodos podrn ser utilizados por el controlador para obtener los productos ycrear un nuevo producto, por ejemplo.
5.2 Controlador
Para agregar un nuevo controlador tenemos que realizar un click derecho sobre el direc-torio Controllers Add Controller. All veremos una nueva ventana donde tendremos
5/21/2018 capitulo9
36/76
588
TallerdeFormacin.N
ET
que ingresar el nombre del controlador, ProductosController en nuestro caso, y veremos enla parte inferior algo llamado Scaffolding options. Scaffolding es una tcnica muy popularen los frameworks MVC y, bsicamente, sirve para automatizar en cierta medida algunos delos pasos comunes al momento de realizar el alta, baja y modicacin de una determinadaentidad de software. En nuestro caso elegiremos Controller with empty read/write actions:
Luego de realizada esta accin tendremos nuestro propio controlador, con cierto cdigogenerado por el propio Visual Studio, como se muestra a continuacin:
5/21/2018 capitulo9
37/76
589
TallerdeFormacin.NET
5/21/2018 capitulo9
38/76
590
TallerdeFormacin.N
ET
Es necesario en este momento detenerse a analizar el cdigo que obtuvimos. Como seobserva, el controlador en cierta medida no vara demasiado de cualquier otra clase que po-damos implementar nosotros, lo nico que se nota en principio es que implementa la claseabstracta Controller.
Pero hay una particularidad: cada uno de los mtodos de esta clase que retorna un Action-Result recibe un nombre especial: Action.
Cada Action tiene la responsabilidad de responder a los pedidos del usuario, realizandolas tareas apropiadas y retornando la vista generada al usuario (navegador, cliente, etc.) queinvoc la accin.
En general, una accin de un controlador debe responder a dos tipos de pedidos HTTP:GET y POST. Para distinguir estos dos casos se utiliza, en el caso de las acciones POST, lametadata [HttpPost] en la parte superior de la declaracin de la accin. Esto permite, porejemplo, separar los casos en los cuales se quiere visualizar los datos existentes mediante unpedido GET del caso que se quiera modicar los datos mediante un POST.
Vamos ahora a completar el controlador implementando dos acciones: Index y Create. Enel caso de la accin Index, lo que se har es obtener todos los productos para desplegarlos en
un listado en la vista, y en el caso de la accin Create, insertar un nuevo producto en la basede datos, enviando los datos desde la vista hacia el modelo.
5/21/2018 capitulo9
39/76
591
TallerdeFormacin.NET
Si observamos detalladamente el mtodo Index, observamos lo siguiente: Le solicitamos al modelo que nos retorne la lista de productos. Le entregamos a la vista la lista que nos retorn el modelo.En este caso, el controlador solamente actua de intermediario entre la vista y el modelo
pero, en casos ms complejos podra, por ejemplo, agregar validaciones, tomar decisionesdependiendo de ciertas entradas (por ejemplo, usario, rol, etc.).
En el caso del mtodo Create podemos observar que recibe como parmetro una For-mCollection. Este parmetro representa una coleccin muy particular, ya que su contenidoes todos aquellos valores que se ingresaron en el formulario por parte del usuario. De estaforma, el controlador obtiene esos valores (pudiendo, otra vez, realizar las acciones que creaconveniente) y crea un ProductoDTO para poder enviar al modelo, que va a ser el encargado
en denitiva de efectivamente ingresar los datos en la base de datos.
5/21/2018 capitulo9
40/76
592
TallerdeFormacin.N
ET
5.3 Vistas
Por ltimo, para concluir nuestra aplicacin, una parte no menor, la creacin de las dis-tintas vistas. Recordemos que las vistas van a ser las responsables de mostrar desplegar lainformacin al usuario, y aqu radica la importancia de las mismas.
Para seguir nuestro ejemplo, vamos otra vez a aprovechar las ventajas del scaffolding almomento de crear nuestras vistas.
Empecemos con la vista principal de nuestra aplicacin, que en nuestro caso va a ser elIndex, y lo que va a realizar es mostrar un listado de los distintos productos con los que con-tamos en nuestra base de datos.
Para crear la vista, primero creamos el subdirectorio Productos debajo del directorioViews (recordemos la seccin de las convenciones). En el subdirectorio Productos, hacemosclick derecho y seleccionamos Add View
Ahora se abre una nueva ventana, donde tenemos varias opciones: View Name: El nombre de la vista. En nuestro caso, estamos desarrollando la vista
principal, Index. View Engine: el motor de visualizacin. Dejamos el valor de Razor. Marcamos el check box de Create a strongly typed view. Esto nos permitir elegir el
tipo de los datos con el que vamos a trabajar en la vista (en nuestro caso ser ProductoDTO).Es imprescindible para el correcto funcionamiento del scaffolding.
En Model Class seleccionamos el tipo de datos (el modelo) con el que trabajaremos enla vista, como se explic en el punto anterior.
En Scaffold Template podemos elegir entre varias opciones para el tipo de template autilizar, como ser Create, List, Edit, etc. En el caso en que estamos, seleccionamos List:
Luego marcamos que use el layout por defecto que estamos utilizando. Finalmente, presionamos Add.
5/21/2018 capitulo9
41/76
593
TallerdeFormacin.NET
En este momento ya tenemos creada nuestra vista, si presionamos F5 podremos corrernuestra aplicacin y dirigirnos a http://localhost:[puerto]/Productos/Index para acceder allistado de productos de nuestra aplicacin:
Como se observa, en este momento el listado se encuentra vaco, por lo que es necesarioagregarle nuevos datos. Para ello, necesitamos crear la vista Create. Siguiendo los pasos comose describieron anteriormente podemos generar la siguiente vista:
5/21/2018 capitulo9
42/76
594
TallerdeFormacin.N
ET
Con la que podremos ahora s crear nuestros datos. Para ello, ingresamos los distintosdatos y presionamos el botn Create, el cual llamar a la accin del controlador Create, quese comunicar con el modelo para crear el producto correctamente.
Para nuestro ejemplo ingresamos nicamente dos datos, con lo cual nuestro listado severa de la siguiente forma:
Solamente quedara agregar, entonces, las vistas para la edicin, los detalles y el borrado deun producto, ya que el template, por defecto, cre los links para estas acciones en el listado.
6 Referencias
ASP.NET MVC 3 [ltima visita: Noviembre 2011]http://www.asp.net/mvc/mvc3Creating Model clases with Linq To SQL [ltima visita: Noviembre 2011]http://www.asp.net/mvc/tutorials/creating-model-classes-with-linq-to-sql-csScott Guthrie blog: Scott Guthrie lider de proyecto del equipo de desarrollo de ASP.NET[ltima visita: Noviembre 2011]http://weblogs.asp.net/scottgu/Data Transfer Object [ltima visita: Noviembre 2011]http://en.wikipedia.org/wiki/Data_transfer_objectScaffolding [ltima visita: Noviembre 2011]http://en.wikipedia.org/wiki/Scaffold_%28programming%29
5/21/2018 capitulo9
43/76
595
TallerdeFormacin.NET
ASP.NET MVC
1 Introduccin
Ya hemos visto el funcionamiento y la arquitectura general de una aplicacin ASP.NETMVC. Ahora vamos a enfocarnos en entender ms en profundidad a los controladores y lasvistas y, ms particularmente, su implementacin en ASP.NET, as como tambin las caracte-rsticas y facilidades que nos ofrecen. En cuanto al modelo, se puede ver ms en profundidaden lo que reere al acceso a datos.
2 Controladores
Como ya se mencion, los controladores en el marco del patrn MVC son los responsa-bles de responder a las acciones del usuario, en general, esto implica realizar los cambios enel modelo apropiadamente a la entrada realizada por el usuario.
De esta forma, los controladores manejan el ujo de la aplicacin, trabajan con los datosingresados y retornan los datos a la vista acorde a la accin realizada por el usuario.
Con anterioridad, los servidores web tan solo entregaban como respuesta a un pedidopor parte del usuario, pginas HTML estticas alojadas en el propio servidor. Luego de untiempo fueron ganando terreno las llamadas pginas dinmicas, o sea, pginas generadas en
el momento a travs de scripts tambin alojados en el propio servidor web.En el caso de MVC, el funcionamiento es un poco distinto. Mediante la URL del pedidorealizado se identica qu controlador y qu accin del mismo es necesario instanciar1y pro-vee los argumentos necesarios para instanciar dicho mtodo. Es este mtodo el que decidequ vista entregar al usuario, y la vista es la que despliega la informacin al usuario.
Es claro que, en vez de tener una relacin directa entre la URL y un archivo existente enel servidor web, tenemos una relacin entre la URL y un mtodo en un controlador.
Por eso es bueno pensar en ASP.NET MVC como un escenario web donde el frameworkretorna el resultado de llamada a acciones realizada sobre controladores, y no pginas exis-tentes fsicamente en el servidor.
2.1 Implementando controladores en ASP.NET MVC
Ya hemos visto que la forma de agregar un controlador es mediante la interfaz del propioVisual Studio 2010; la idea ahora es ver con ms profundidad qu implica realizar esta accin.
Vamos a recordar el HomeController creado por defecto por el Visual Studio 2010:El HomeController (as como tambin cualquier controlador que implementemos) im-
plementa la clase abstracta Controller. Esta clase abstracta provee una implementacin basepara todas las caractersticas necesarias para que un desarrollador implemente un controla-
dor, sin preocuparse de cosas como el ruteo, por ejemplo.
1Este comportamiento se conoce como Routing (mecanismo de ruteo), y se ver ms detalladamente un poco ms adelante.
5/21/2018 capitulo9
44/76
596
TallerdeFormacin.N
ET
Adems, provee dos caractersticas clave: Action methods: Son los mtodos del controlador, que responde a las acciones del usua-
rio. Cada action method es expuesto en una URL distinta y se invoca mediante parmetrosextrados del pedido entrante (o sea, los parmetros forman parte del Request de la accin). Action results: Se pueden retornar objetos que describan el resultado de una accin (por
ejemplo, desplegar una vista o redirigir al usuario a otra URL).
2.2 Recibiendo datos
En los controladores, en algn momento de la implementacin de algn action method,va a ser necesario poder acceder a los datos ingresados por el usuario en la vista, como serlos datos de un formulario.
Las dos formas principales de obtener estos datos son las siguientes: Extraerlos de un conjunto de objetos de contexto. Recibirlos como parmetros en el action method.
2.2.1 Objetos de contexto
Es la forma ms directa de obtener los datos necesarios. Al crear el controlador imple-mentando la clase abstracta Controller se tiene acceso a un muy amplio conjunto de propie-dades que nos permiten acceder a distinta informacin del Request.
2.2.2 Parmetros de los action methods
Como vimos al momento de crear nuestro controlador de Productos, es posible que losmtodos del controlador reciban parmetros como, por ejemplo, en el siguiente mtodo:
public ActionResult Edit(decimal id){return View();}En este caso, el action method recibe el identicador del producto que se quiere editar
explcitamente como parmetro. Es posible replicar la forma de recibir los datos, pero de estamanera ciertos datos (como el identicador) se manejan de forma ms explcita y permite,adems, armar una ruta al producto del estilo:
5/21/2018 capitulo9
45/76
597
TallerdeFormacin.NET
http://[server]:[port]/Productos/Edit/{id}Que es una de las caractersticas ms importantes del ruteo de ASP.NET MVC.Ingresando esa URL directamente se accede a la vista generada por el controlador me-
diante la accin Edit con el identicador de producto {id}.
2.3 Generando la respuesta al usuario
Luego que el controlador termina de procesar un request, por lo general es necesariogenerar una response (respuesta).
Aqu es donde entran en accin los Action Result.ASP.NET MVC provee distintos tipos de Action Result que tratan de representar las dis-
tintas posibilidades al momento de responder a una accin del usuario.Para ello, se utilizan distintas implementaciones de la clase base ActionResult, que retor-
nan objetos que permiten, por ejemplo, mostrar una vista, redirigir a una URL, etc.Se utilizan, adems, helpers que ayudan a simplicar la utilizacin de los distintos Action-
Result existentes.La siguiente tabla muestra los action result ms comnmente utilizados:
5/21/2018 capitulo9
46/76
598
TallerdeFormacin.N
ET
2.3.1 Retornando HTML para mostrar en una vista
La ms comn de las respuestas desde un action method es generar HTML y enviarloal navegador. Utilizando las Action Results esto se realiza creando una instancia de la claseActionResult que especica la vista que se quiere desplegar con el n de generar el HTML
al usuario.
Un ejemplo de esto es con el Action Method Index que Visual Studio genera por defecto:
public ActionResult Index(){ViewBag.Message = Welcome to ASP.NET MVC!;return View();}
La forma de retornar la vista es mediante el helper View().Tambin se puede explicitar la vista que se quiere retornar indicando la ruta a la vista:
public ActionResult Index(){ViewBag.Message = Welcome to ASP.NET MVC!;return View(~/Views/Other/Index.cxhtml);}
2.3.2 Realizando redirecciones
Es muy comn como resultado de un action method no producir una salida directamen-te, sino redirigir al usuario a otra URL. Esta otra URL podra perfectamente ser otro actionmethod que sea el responsable de generar la salida al usuario.
La forma ms bsica de redirigir a un navegador es llamando al helper Redirect, que retor-na una instancia de la clase RedirectResult:
public ActionResult Redirect()
{return Redirect(/Productos/Index);}Es posible utilizar una redireccin a una ruta indicando el controlador, el mtodo y un
parmetro, por ejemplo:
public ActionResult Redirect(){return RedirectToRoute(new
{controller = Productos,action = Index,
5/21/2018 capitulo9
47/76
599
TallerdeFormacin.NET
id = 5});}
Tambin podemos redirigir a un action method especico, de una forma muy sencilla.
En caso que el action method se encuentre en el mismo controlador:public ActionResult Redirect(){return RedirectToAction(Edit);}Si, por otra parte, el action method se encuentra en otro controlador, se debe indicar elmismo como otro parmetro:public ActionResult Redirect()
{return RedirectToAction(Edit, OtroControlador);}
2.3.3 Enviar datos
Adems del HTML, hay cantidad de otros datos basados en texto que se podran necesitargenerar en respuesta a una accin del usuario, como ser XML, JSON o texto plano.
Para retornar texto plano, se realiza lo siguiente:
public ActionResult Texto(){return Content(Retorno un texto cualquiera., text/plain,Encoding.Default);}El helper Content tiene tres parmetros: El primero son los datos que se van a enviar. El segundo es el valor de la cabezera HTTP content-type. En este caso, para texto
plano se utiliza text/plain.
El tercero es la codicacin, en este caso se utiliza la codicacin por defecto.Si, por ejemplo, se quiere retornar XML, se podra realizar lo siguiente:public ActionResult XMLData(){ProductosModels model = new ProductosModels();var productos = model.GetProductos();XElement data = new XElement(Productos,productos.Select(p => new XElement(Producto,
new XAttribute(Id, p.Id),new XAttribute(Nombre, p.Nombre),new XAttribute(Descripcion, p.Descripcion),
5/21/2018 capitulo9
48/76
600
TallerdeFormacin.N
ET
new XAttribute(Stock, p.Stock))));return Content(data.ToString(), text/xml);}Para este ejemplo, utilizamos los mismos productos que ya tenamos en nuestro modelo
y, mediante la utilizacin de LINQ To XML, los transformamos en una estructura XML y
retornamos esa estructura como un string.El resultado de una llamada a este action method sera el siguiente, en caso de tener dos
productos en nuestra base:
Hoy en da es muy comn, para trabajar en conjunto con JavaScript, utilizar JSON pararetornar los datos. Por suerte, ASP.NET MVC provee un helper que ahorra mucho trabajo ala hora de enviar datos en formato JSON.
public ActionResult JsonData(){ProductosModels model = new ProductosModels();var productos = model.GetProductos();
return Json(productos, JsonRequestBehavior.AllowGet);}
Por defecto, y por temas de seguridad, ASP.NET MVC bloquea los pedidos GET de datosJson. Para deshabilitar esta opcin, se utiliza el segundo parmetro del helper con el valorJsonRequestBehavior.AllowGet.
El resultado de la llamada a este action method sera el siguiente:[{Id:0,Nombre:Producto 0,Descripcion:Descripcion 0,Stock:150},{Id:1,Nombre:Producto 1,Descripcion:Descripcion 1,Stock:500}]
2.3.4 Retornar archivos y datos binarios
Tambin es muy comn, para determinadas situaciones, poder responder a un pedido delusuario enviando datos binarios, como puede ser por ejemplo un archivo.
Para estos casos, ASP.NET MVC provee un helper cuyo n especco justamente es ese,el de enviar archivos y datos binarios. Este helper es el File.
Para el caso de enviar un archivo almacenado en el servidor, se realiza lo siguiente:
public ActionResult GetFile(){string leName = @c:\ASPNETMVC_1.pdf ;
string contentType = application/pdf;string downloadName = ASPNETMVC_1.pdf;return File(leName, contentType, downloadName);
5/21/2018 capitulo9
49/76
601
TallerdeFormacin.NET
}
Al momento de invocar al action method GetFile, el navegador va a mostrar una ventanapara que el usuario pueda salvar el archivo:
El helper File cuenta con tres parmetros, que se explican a continuacin:Si, por ejemplo, el contenido de un archivo estuviera cargado en memoria en un arreglo
de bytes, se podra enviar el contenido de la siguiente forma:
public ActionResult GetFile(){string contentType = application/pdf;string downloadName = ASPNETMVC_1.pdf;byte[] data = .... // Se obtienen los datos de alguna formareturn File(data, contentType, downloadName);
}2.4 Enviando datos desde un Action Method a una vista
A menudo, es necesario enviar datos desde un action method que sean necesarios al mo-mento de desplegar la vista. ASP.NET MVC ofrece varias formas diferentes para realizaresto, y veremos a continuacin las ms utilizadas.
2.4.1 Como parmetro del helper View
La forma ms comn de enviar datos es pasndolos como parmetro del helper View,como se muestra a continuacin:public ActionResult Index()
5/21/2018 capitulo9
50/76
602
TallerdeFormacin.N
ET
{ViewBag.Message = Welcome to ASP.NET MVC!;DateTime date = DateTime.Now;return View(date);}
En este caso, enviamos a la vista la fecha actual del server.Del lado de la vista ya podemos trabajar con este objeto de la siguiente forma:@{ViewBag.Title = Home Page;}@ViewBag.Message
La fecha es: @(((DateTime)Model).DayOfWeek)Si bien esto funciona, tiene la desventaja de que, al momento de trabajar en la vista, no
contamos con el IntelliSense del Visual Studio. Para poder trabajar con esta importante ayudase podra realizar lo siguiente:
Como se observa, al principio se indica con @model el tipo del objeto pasado por par-metro para, de esta forma, poder acceder a toda la potencia del editor.
2.4.2 Utilizando el ViewBag
Esta caracterstica nos permite denir propiedades arbitrarias en un objeto dinmico (elViewBag) y accederlos directamente en la vista. Es realmente simple de utilizar, como se
muestra a continuacin:
public ActionResult Index(){ViewBag.Message = Utilizando el ViewBag;ViewBag.Date = DateTime.Now;return View();}En la vista, estos datos se accederan de la siguiente forma:
@{ViewBag.Title = Home Page;}
5/21/2018 capitulo9
51/76
603
TallerdeFormacin.NET
La desventaja de usar el ViewBag es el hecho de que no hay forma de saber en tiempode compilacin si el dato se agreg al ViewBag o no, por lo que de existir errores, solo se
encontrarn en tiempo de ejecucin.ViewBag fue introducido en la versin 3 de ASP.NET MVC. Previamente exista una co-
leccin similar llamada ViewData, que se manejaba de forma muy parecida.
3 Vistas
Hemos visto que los action methods retornan action results y, adems, como se mencio-n, la enorme mayora de las veces los action results son de la clase ViewResult, lo que secorresponde a desplegar las distintas vistas de nuestra aplicacin.
Si bien hemos visto varios pequeos ejemplos de vistas, ahora se va a entrar ms en detallede las distintas posibilidades que tenemos, utilizando el motor de vistas Razor Engine.2
El motor de Razor View Engine compila las vistas de nuestra aplicacin web como formade mejorar la performance. Para esto, las vistas se traducen a cdigo C#, para posteriormenteser compiladas. Esto es lo que permite que sea tan sencillo incluir cdigo C# embebido enlas propias vistas.
Las vistas son compiladas al momento de ser utilizadas por primera vez, y las clasescompiladas se almacenan en el disco, hasta el momento en que la vista cambie y se necesiterecompilar.
3.1 Agregando contenido dinmicamente a las vistas
El objetivo principal de las vistas es el de permitir desplegar los datos de un modelo en lainterfaz de usuario. Para ello, es necesario poder agregar contenido dinmicamente a las vis-tas. El contenido dinmico se genera en tiempo de ejecucin y, probablemente, sea distintopara cada pedido.
Existen tres tcnicas principales para agregar contenido dinmico a las vistas en ASP.NETMVC:
2El motor Razor Engine fue introducido en ASP.NET MVC, pudiendo elegirse el motor por defecto de ASP.NET en sulugar, o cualquier otro motor implementado por terceros, o por uno mismo, pero esto escapa al alcance de este documento.
5/21/2018 capitulo9
52/76
604
TallerdeFormacin.N
ET
3.1.1 Utilizando cdigo embebido
Para embeber cdigo en una vista, lo nico que se debe hacer es anteponer un smbolo @antes del cdigo a embeber. Por ejemplo, para mostrar una lista de 0 a 9 utilizando vietas,se realizara de la siguiente forma:
@for (int i = 0; i < 10; i++){@i }Si quisiramos embeber varias lneas, lo que haramos es rodear el bloque de cdigo conun @{ y un }:@{ViewBag.Title = Home Page;
}
3.1.2 Utilizando los HTML Helpers
Dos de los HTML helpers ms utilizados son el Html.BeginForm y Html.EndForm. Es-tos helpers generan los tags HTML para la denicin de un formulario:@{ Html.BeginForm(Edit, Home); }@{ Html.EndForm();}Estos tags generan el siguiente cdigo HTML:
Como se nota, ya en el action del form se apunta al action method indicado en el helper.Adems, tenemos helpers para los elementos input de HTML, como se muestra en la
siguiente tabla:
Un poco distinta es la forma de agregar combo boxes mediante la utilizacin de helpers;en la siguiente tabla se muestra la forma de realizar esto:
5/21/2018 capitulo9
53/76
605
TallerdeFormacin.NET
3.1.3 Utilizando vistas parciales
Pueden darse escenarios donde sea necesario utilizar los mismos fragmentos de cdigoen distintas vistas a lo largo de toda nuestra aplicacin web. Para que sea nuestra aplicacinmucho ms mantenible en estos casos, es que existen las partial views, o sea, vistas parciales.
Las vistas parciales son archivos de vistas separados que contienen fragmentos de cdigoque pueden ser incluidos en otras vistas.
Para crear una vista parcial, al igual que con las vistas regulares, se hace click derecho en-cima del directorio donde vamos a crear la vista, luego seleccionamos Add View
Aparecer el dilogo de creacin de una nueva vista, que ya se ha visto:
Una de las opciones, como se ve en la Figura 3 Dilogo para agregar una nueva vista, esun checkbox que permite crear una vista parcial.
Una vez creada la vista parcial, para utilizarla en alguna vista principal, lo que se tiene quehacer es lo siguiente:
@Html.Partial(VistaParcial)
4 URL y ruteo
En ASP.NET tradicional, utilizando WebForms, cada URL se corresponda unvocamen-te con un archivo fsico alojado en el servidor (por lo general una pgina, o sea, un archivo.aspx). El servidor web tena como principal tarea recibir el pedido del usuario y devolver
como respuesta la pgina correspondiente.Esto no funciona de esta forma en ASP.NET MVC porque, como ya se ha mencionado,un URL no se corresponde a un archivo fsico, sino que indica qu accin de qu controlador
5/21/2018 capitulo9
54/76
606
TallerdeFormacin.N
ET
y con cules parmetros invocar y, dependiendo de esto, se genera la vista correspondiente.Para manejar entonces los pedidos, ASP.NET MVC utiliza un sistema de ruteo, que tiene
dos funciones principales: Examinar las URLs entrantes, y de estas extraer a qu controlador, qu accin y con
cules parmetros invocar.
Generar las URLs salientes. En todo el HTML generado los elementos que invocanacciones necesitan que sean generados correctamente, de forma que invoquen al controladory accin que necesite.
Las rutas en un proyecto de ASP.NET MVC se denen en el archivo Global.asax de lasolucin.
En la solucin, por defecto, el mapeo de las rutas se dene de la siguiente manera:public static void RegisterRoutes(RouteCollection routes)
{routes.IgnoreRoute({resource}.axd/{*pathInfo});routes.MapRoute(
Default, // Route name{controller}/{action}/{id}, // URL with parametersnew { controller = Home, action = Index, id = UrlParameter.Optional }// Parameter defaults);}
Lo importante ac es la lnea que comienza con routes.MapRoute. En ella se indica cmose realiza el mapeo de una URL en nuestra aplicacin, en este caso de la forma:
{controller}/{action}/{id}
5 Bibliografa
ASP.NET MVC 3 [ltima visita: Noviembre 2011]http://www.asp.net/mvc/mvc3
Razor View Engine [ltima visita: Noviembre 2011]http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx
Scott Guthrie blog: Scott Guthrie lider de proyecto del equipo de desarrollo de ASP.NET[ltima visita: Noviembre 2011]http://weblogs.asp.net/scottgu/
5/21/2018 capitulo9
55/76
607
TallerdeFormacin.NET
Silverlight
1 Introduccin
El desarrollo de aplicaciones se puede dividir en dos partes bien diferenciadas. Por unlado, se encuentra el desarrollo de la aplicacin en s, con toda la lgica necesaria para sucorrecto funcionamiento y navegacin, al igual que la lgica necesaria para manipular, inter-pretar y validar los datos que se desean presentar. Por otro, se encuentra el esfuerzo necesariopara que dicha aplicacin presente al usuario nal una interfaz usable y atractiva.
En diciembre de 2006 Microsoft haca pblica la primera versin CTP de Silverlight, unanueva tecnologa destinada a enriquecer las aplicaciones web. Desde aquel entonces la tecno-
loga ha evolucionado contando con el soporte de la comunidad y, desde abril de 2010, estdisponible la versin 4.0 de Silverlight que incorpora grandes avances y mltiples mejoras. [3]
La capa que describe la agrupacin lgica de las funcionalidades y componentes que brin-dan la interfaz hacia el usuario en una aplicacin se conoce como la capa de presentacin(presentation layer).
La capa de presentacin usualmente incluye UI components: elementos visuales usadospara mostrar informacin y aceptar entrada de usuario. Presentation Logic Components: elcdigo de la aplicacin que dene el comportamiento lgico y estructura de la aplicacin(independiente de la implementacin de la interfaz). Cuando se implementa el patrn Se-pareted Presentation, los componentes lgicos de presentacin pueden incluir Presenter,Presentation Model y View Model. La capa de presentacin puede incluir componentes de
Presentation Layer Model que encapsulen los datos de la capa de negocios o componentesde Presentation Entity que encapsulen la lgica de negocios y datos.
5/21/2018 capitulo9
56/76
608
TallerdeFormacin.N
ET
1.2 Consideraciones de diseo para la capa de presentacin
Hay varios factores que se deben considerar en el diseo de la capa de presentacin. Lossiguientes principios ayudan a que el diseo de una aplicacin siga las mejores prcticas y secumplan los requisitos. [1]
Elegir el tipo adecuado de aplicacin: Rich (smart) client. Web client. Rich Internet application (RIA).
Elegir la tecnologa adecuada. Usar patrones. Modularizar. Considerar guas de usabilidad. Seguir principios user design driven.
2 SilverlightMicrosoft Silverlight es una plataforma de desarrollo de Microsoft que permite desarro-
llar aplicaciones ricas. Silverlight funciona sobre varias plataformas y mltiples exploradoresy proporciona una generacin de experiencias de usuario basadas en .NET. Es necesaria la
instalacin del complemento plug-in libre, de unos 5Mb.Ofrece un modelo de programacin compatible con lenguajes .NET como Visual Basic
.NET, C# y F#, y otros como AJAX, Python, Ruby.Las aplicaciones Silverlight, en general, corren en el cliente y se comunican con servidores
y servicios. [3] [4]La versin actual, recomendada y estable, es Silverlight 4 con la cual se trabajar en este
curso. Silverlight 5 est disponible en su versin RC (Release Candidate).
2.1 Cundo utilizar Silverlight?
Esta tecnologa se debera considerar si se desea disear una RIA o determinadas carac-tersticas (ricas) a una aplicacin Web. [1] Si desea construir una RIA para el navegador