Está en la página 1de 76

9. Taller de Formacin.

NET
Ing. Gustavo Guimerans
A/C. Nicols Sampietro
A/C. Emiliano Martnez
554
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 una
aplicacin 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 el
objetivo de lograr una aplicacin ms simple de confgurar y mantener.
Este documento est basado en la segunda edicin del libro Mi-
crosoft Application Architecture Guide [1]. Su lectura brinda una
completa gua sobre el uso de las distintas tecnologas.
555
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Service agents: cuando un componente de negocio necesita acceder a datos que provee
un servicio externo, es necesario implementar cdigo. Los componentes que implementan
esta 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 offine y
un 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 ef-
ciente y segura, fcil de mantener y extender cuando hay cambios en los requerimientos de
la capa de negocio. En este captulo se describen los principales puntos generales a tener en
cuenta al momento de disear la capa de acceso a datos. Elegir el tipo adecuado de tecnologa
depende 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 a
datos.
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 comunes
siguen enfoques:
Patrones Domain Model Table Module.
Frameworks Object/Relational Mapping (O/RM). Considerar estructuras de datos
consolidadas.
556
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 datos
que requiera la aplicacin. Es necesario elegir el mtodo apropiado para almacenar y proteger
la informacin de conexin, eventualmente mediante secciones encriptadas de archivos de
confguracin. 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 de
seguridad. Reducir trfco muchas idas y vueltas.
Considerar operaciones por lotes (batch) en simples sentencias SQL.
Considerar los objetivos de escalabilidad y de performance.
3 Consideraciones especifcas de diseo
Al momento de desarrollar el diseo hay varios problemas comunes a considerarse. Es-
tos problemas pueden categorizarse en areas especifcas de diseo. Las areas donde ms
problemas 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 especfcas. En
el 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 usar
objetos 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 aplicacin
y 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.
557
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Si se requiere soporte para escenarios de acceso a datos ms complejos o simplifcar el
cdigo de acceso a datos, considerar utilizar el Enterprise Library Data Access Application
Block.
Para aplicaciones Web data driven con pginas basadas en el modelo de datos de la base
de 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 fexibilidad 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 identifcar las restricciones asociadas a los datos que se
accedern, lo cual ayudar a identifcar la tecnologa de acceso a datos adecuada. El siguiente
paso consiste en decidir la estrategia de mapeo y el enfoque de acceso a datos que se desea
implementar, esto consiste en identifcar 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 el
acceso 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 esta
gua una descripcin de las tecnologas disponibles.
El sitio web de la Microsoft Developer Network (MSDN) [2] es el lugar indicado para
utilizar 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, ya
que, 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 plataforma
Microsoft, 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 importancia
que 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 informacin
de cualquier fuente de datos Linq, tpicamente un Entity Data Model, mediante REST sobre
HTTP. La informacin puede direccionarse mediante Uniform Resource Identifers (URIs).
558
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Los servicios Web pueden confgurarse para que retornen los datos con formato Atom y
JavaScript Object Notation (JSON).
ADO.NET Entity Framework (EF): es un conjunto de tecnologas ADO.NET que
permiten el desarrollo de aplicaciones orientadas a datos. Brinda una experiencia de acceso
fuertemente 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 refeja los objetos de negocio). Introduce Entity Data Model a ADO.NET [4]. Soporta
LINQ to Entities. Permite que los programadores trabajen:
con datos en forma de objetos y propiedades especfcos del dominio; por ejemplo,
con clientes y direcciones, sin tener que pensar en las tablas y columnas de las bases en las
que 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 especfcos del origen.
El modelo conceptual, el modelo de almacenamiento y las asignaciones entre los dos se
expresan en esquemas basados en XML y se defnen en archivos de extensiones correspon-
dientes: El Conceptual Schema Defnition Language (CSDL) defne el modelo conceptual.
Es la implementacin de EF del Entity Data Model. La extensin de archivo es .csdl. El Store
Schema Defnition Language (SSDL) defne el modelo de almacenamiento. La extensin de
archivo es .ssdl. El Mapping Specifcation Language (MSL) defne las asignaciones entre los
modelos conceptual y de almacenamiento. La extensin de archivo es .msl.
Estos modelos y archivos de asignacin permiten a EF transformar las operaciones de
creacin, 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 entidades
como asociaciones [5].
559
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
ADO.NET Sync Services. Es un proveedor incluido en el Microsoft Sync Framework y se
utiliza para implementar sincronizacin en bases de datos embebidas en ADO.NET.
Language Integrated Query (LINQ). Brinda libreras para extender C# y Visual Basic con
lenguaje 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.
560
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 fexible, y se necesita la fexibilidad 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 de
acceso 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 debe
tomar en cuenta el tipo de datos y cmo se manipularn. Ciertas
tecnologas son mejores para determinados escenarios.
561
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
consultas sobre datos relacionales usando sintaxis LINQ. LINQ to Objects. Consultas
sobre:
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 nuevas
soluciones 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 Benefcios y consideraciones de cada tecnologa
Acceso a datos Objeto-Relacional
ADO.NET Entity Framework (EF)
Benefcios
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 defnidas. Brinda a los desarrolladores
de la capa de negocios acceso a los datos sin necesidad de conocer particularidades (especi-
fcaciones) 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 mtodo
tradicional.
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 y
re-deployar las libreras del EF.
LINQ to Entities
Benefcios
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 SQL
Benefcios
562
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Lectura y escritura de modelo de datos como objetos cuando estos modelos coinciden.
Brinda acceso LINQ fuertemente tipado. Procesamiento del lado del servidor.
Consideraciones
En .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
Benefcios
Permite realizar todo tipo de consultas sobre un DataSet.
Consideraciones
Todo el procesamiento se da en el cliente.
ADO.NET Sync Services
Benefcios
Brinda sincronizacin entre bases de datos, escenarios de colaboracin y sin conexin.
La sincronizacin puede ejecutar en background.
Consideraciones
Hay que implementar el traqueo de cambios.
Las grandes cantidades de datos pueden degradar notoriamente la performance.
SOA/Services
ADO.NET Data Services Framework
Benefcios
Los datos pueden ser accedidos directamente mediante una URI usando un esquema
REST 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 API
para Windows Azure Tables, SQL Data Services, etc.
Consideraciones
Ideado para escenarios orientados a servicios.
LINQ to Data Services
Benefcios
Permite crear consultas LINQ del lado del cliente y los datos se retornan de ADO.NET
Data Services.
Soporta consultas LINQ sobre datos REST.
Consideraciones
Requiere ADO.NET Data Services del lado del cliente.
N-capas y genricas
ADO.NET Core
Benefcios
563
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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
Benefcios
Permite crear consultas LINQ sobre objetos en memoria.
Puede ser utilizado: Sobre cualquier coleccin que soporte IEnumerable o
IEnumerable<T>. Para consultar strings, metadata basada en refection y directorio de ar-
chivos.
Consideraciones
Soporte para objetos que implementen IEnumerable.
LINQ to XML
Benefcios
Permite crear consultas LINQ sobre datos XML.
Se compara con Document Object Model (DOM).
Consideraciones
No 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 el
Entity 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.
564
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
5.2 Paso 2 Seleccionar como recuperar y persistir objetos de negocio desde un al-
macn de datos
Luego de identifcar los requerimientos de la fuente de datos, el prximo paso consiste en
seleccionar 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 o
frameworks Object/Relational Mapping (O/RM). Al momento de mapear esas entidades a
estructuras de datos, el principal factor para decidir cmo realizar ese mapeo es el tipo de
entidades 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 identifcar como conectarse a la fuente de
datos, proteger las credenciales de los usuarios y realizar transacciones. A continuacin, se
muestran los principales puntos a considerar (cada uno incluye varias consideraciones para
lograr 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 fuente
de 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 para
otro 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 una
conexin cuando sea posible. Esto permite caractersticas de ADO.NET sin la necesidad de
servicios coordinadores de transacciones distribuidas. Si se usa un pool, realizar una prueba
de carga con escenarios simultneos y tunear la performance basado en los resultados. Por
razones 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 situaciones
donde 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 trfco excesivo (idas
y vueltas).
Otro aspecto importante a considerar son los requerimientos de seguridad para acceder
a la fuente de datos. En otras palabras: cmo se autenticarn los componentes de acceso a
datos 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 confable.
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
565
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
signifca que ADO.NET no necesita crear una nueva conexin y abrirla contra la fuente de
datos todo el tiempo. Si bien consumen recursos, reducen los delays asociados al acceso a
datos y hacen que las aplicaciones corran ms efcientes 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 transacciones
implcitas y explicitas. Considerar su uso si se est desarrollando una aplicacin nueva que
requiera 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 namespace
System.Transaction. Si bien no son tan rpidas como las manuales, o explicitas, son ms
fciles de desarrollar y se logran soluciones fexibles y mantenibles. ADO.NET Transactions
basadas en una conexin simple. Este es el enfoque ms efciente para transacciones con-
troladas por clientes en un nico almacn de datos. Considerar su uso si se est extendiendo
una aplicacin que ya utilizaba esta tecnologa o se est desarrollando para un entorno que
no soporte la versin 2.0 del Framework .NET T-SQL (Database) Transactions controladas
por comandos ejecutados en la base de datos. Son ms efcientes para transacciones contro-
ladas por el servidor en un nico almacn de datos, donde la base de datos gestiona toda la
transaccin. Considerar esta tecnologa en el desarrollo de stored procedures que encapsulan
todos 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].
566
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Windows
Communication
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 confables. Windows
Communication Foundation (WCF) esta diseado para ofrecer un enfoque administrable a
la computacin distribuida, la interoperabilidad y, en defnitiva, la arquitectura orientada a
servicios.
En otras palabras Windows Communication Foundation (WCF) es un framework
1
para la
creacin de aplicaciones basadas en servicios. Utilizando WCF se puede enviar informacin
como mensajes asncronos desde un lugar a otro. Este lugar se denomina endpoint. Un
endpoint son lugares donde los mensajes son enviados o recibidos (o ambos) y defnen toda
la informacin necesaria para el intercambio de mensajes. Un endpoint puede ser parte de
un servicio alojado en el Internet Information Server (IIS) o puede ser un servicio alojado
en una aplicacin. Un endpoint puede ser un cliente de un servicio que solicita informacin
a otro endpoint. Los mensajes pueden ser tan simples como un nico carcter o palabra
enviado 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 trfco 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 no
se 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 de
renta de autos decide crear una nueva aplicacin de reservas. Los diseadores de esta nueva
aplicacin 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 soporte
defnido, normalmente con artefactos o mdulos de software concretos, con base a la cual otro proyecto de software puede
ser ms fcilmente organizado y desarrollado.
567
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
dentro y afuera de la compaa. En consecuencia, deciden disear una arquitectura orientada
a servicios, con la lgica de la aplicacin expuesta a travs de un conjunto bien defnido de
servicios.
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 ser
creada especialmente para el nuevo sistema de reserva y usar tambin el framework .NET
y 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 frma de renta de
autos la aplicacin existente debe poder acceder a la lgica de la nueva aplicacin y proveer a
los clientes una experiencia unifcada.
3. Aplicaciones de frmas de socios ejecutando en un conjunto variado de plataformas,
esto incluye: agencias de viaje, aerolneas y cualquier compaa que tenga la necesidad de
crear 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 la
interoperabilidad es directa (comunicacin .NET a .NET).
Para la comunicacin con la aplicacin existente de reservas hecha en J2EE o las aplica-
ciones de las frmas socios, la interoperabilidad se convierte en el objetivo primario.
Los requerimientos de seguridad son tambin muy diferentes, desde una comunicacin
entre 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 otros
escenarios diversos pero realistas.
568
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 son
enviados. La interfaz de servicios se puede pensar como una fachada que expone la lgica de
negocio 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 defnir 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 necesitan
para crear aplicacines WCF y sus clientes.
Un servicio es una entidad que expone uno o mas endpoints cada uno de los cuales
expone una o ms operaciones de servicio. El endpoint de un servicio especifca 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 defne la funcionalidad que
provee el servicio a sus clientes.
569
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Esto es comnmente llamado el ABC:
Address
Binding
Contract
Veamos ahora cmo defnir un servicio WCF con un contrato, cmo implementar el
servicio, cmo confgurarlo y, por ltimo, cmo ejecutarlo. Esto se desarrollar en seis pasos.
1. Cmo defnir un contrato de un servicio WCF
Cuando se crea un servicio bsico en WCF la primera tarea es defnir el contrato. El con-
trato especifca cules operaciones tendr el servicio. Los contratos son creados defniendo
una interfaz en C++, C# o Visual Basic. Cada mtodo en la interfaz corresponde a una
operacin especfca del servicio. Cada interfaz debe contener el atributo ServiceContrac-
tAttribute y cada operacin debe contener el atributo OperationContractAttribute. Si un
mtodo dentro de una interfaz no contiene el atributo antes mencionado, dicho mtodo no
ser 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 secundario
en 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 y
seleccione 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 pestaa
Aplicacin 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 nombres
predeterminado. Haga clic en el men Archivo y seleccione Guardar todo para guardar los
cambios.
5. Luego, cambie el espacio de nombres en el archivo Program.cs generado a Microsoft.
ServiceModel.Samples como se muestra en el siguiente ejemplo:
570
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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.using
System.ServiceModel.
8. Defna una nueva interfaz denominada ICalculator y aplique el atributo ServiceCon-
tractAttribute a la interfaz con un valor de Namespace de http://Microsoft.ServiceModel.
Samples. Especifcar el espacio de nombres explcitamente es un procedimiento recomen-
dado porque evita que el valor de espacio de nombres predeterminado se agregue al nombre
del 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 pblico
de WCF.
El siguiente cdigo unifcar el resultado obtenido al realizar cada uno de los pasos deta-
llados anteriormente:
571
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 en
Windows 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 def-
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 clase
denominada CalculatorService que implemente la interfaz ICalculator defnida 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 defni
la interfaz ICalculator. CalculatorService implementa la interfaz ICalculator.
public class CalculatorService: ICalculator
2. Implemente cada mtodo defnido en la interfaz ICalculator dentro de la clase Calcu-
latorService.
El siguiente ejemplo de cdigo muestra la interfaz que defne el contrato de servicio y
la implementacin de la interfaz. Es decir, se despliega tanto el cdigo escrito en la seccin
anterior como en la presente:
572
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 Foundation
para ejecutar el servicio.
Para compilar el cdigo dirjase al men Generar, haga clic en Generar solucin.
573
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 Communication
Foundation (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() defnido en la
clase Program. Esta clase se gener al crear la solucin Service.
Confguracin de una direccin base para el servicio
1. Cree una instancia de Uri para la direccin base del servicio. Este identifcador URI
especifca el esquema HTTP, su equipo local, el nmero de puerto 8000 y la ruta de acceso
ServiceModelSample/Service correspondiente al servicio que se especifc para el espacio de
nombres del servicio del contrato.
Para hospedar el servicio
1. Importe el espacio de nombres System.ServiceModel.Description. Esta lnea de cdigo
se 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 especifcar el
tipo que implementa el contrato de servicios y la direccin base. En este ejemplo, la direccin
base es http://localhost:8000/ServiceModelSamples/Service y Calculator. Service es el tipo
que 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 debera
mostrar un mensaje de error y, a continuacin, llamar a selfHost.Abort().
574
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
4. Agregue un endpoint que exponga el servicio. Para ello, debe especifcar el contrato que
el endpoint est exponiendo, un enlace y la direccin del endpoint. Para obtener este ejemplo,
especifque ICalculator como el contrato, WSHttpBinding como el enlace y CalculatorSer-
vice como la direccin. Observe que la direccin del endpoint es una direccin relativa. La
direccin 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 la
propiedad HttpGetEnabled en true y, a continuacin, agregue el nuevo comportamiento al
servicio.
2
6. Abra el ServiceHost y espere a los mensajes entrantes. Cuando el usuario presione la
tecla Entrar, cierre el ServiceHost.
2
Para obtener ms informacin sobre los problemas de seguridad al publicar metadatos, vea Security Considerations with
Metadata.
575
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Para comprobar si el servicio funciona
1. Ejecute service.exe desde dentro de Visual Studio. Al ejecutarse en Windows Vista, el
servicio se debe ejecutar con privilegios de administrador. Dado que Visual Studio se ejecut
con 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 ejecutar
service.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 Windows
Communication 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 y
usarlos 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) que
WCF proporciona. Esta herramienta obtiene los metadatos del servicio y genera un archivo
de cdigo fuente administrado para un proxy en el lenguaje elegido. Adems de crear el proxy
576
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
de cliente, la herramienta tambin crea el archivo de confguracin para el cliente que permite
que 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 en
Visual Studio 2010:
a. En el Explorador de soluciones (en la esquina superior derecha) de la misma solucin
que 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 plantilla
Aplicacin 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 el
archivo 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
modifcadores adecuados para crear el cdigo de cliente y un archivo de confguracin reali-
zando los siguientes pasos:
a. En el men Inicio, haga clic en Todos los programas y, a continuacin, en Visual Studio
2010. Haga clic en Visual Studio Tools y, a continuacin, en Smbolo del sistema de Visual
Studio 2010.
b. Explore hasta el directorio donde desea colocar el cdigo de cliente.
Si cre el proyecto de cliente con la confguracin predeterminada, el directorio es C:\
Users\<nombre de usuario>\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 modifcadores adecuados para crear el cdigo de cliente.
El siguiente ejemplo genera un archivo de cdigo y un archivo de confguracin 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 extensin
adecuada al lenguaje de programacin: .cs para C#. El modifcador /out cambia el nombre
del archivo proxy de cliente a GeneratedProxy.cs. El modifcador /confg cambia el nombre
predeterminado del archivo de confguracin de cliente, Output.confg, por App.confg.
Observe que los dos archivos se generan en el directorio C:\Users\<nombre de usua-
rio>\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 Agregar
y Elemento existente. Seleccione el archivo generatedProxy generado en el paso anterior.
Ahora ha creado un cliente Windows Communication Foundation (WCF).
577
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
5. Confguracin 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 confguracin del cliente generado mediante la He-
rramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) en el proyecto del cliente
y se explica el contenido de los elementos de confguracin del cliente. La confguracin del
cliente consiste en especifcar 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 elementos
debe especifcarse en el proceso de confguracin del cliente.
Confguracin de un cliente de Windows Communication Foundation
1. Agregue el archivo de confguracin App.confg generado en la seccin anterior al pro-
yecto del cliente en Visual Studio. Haga clic con el botn secundario en el proyecto de cliente
en el Explorador de soluciones, seleccione Agregar y, a continuacin, Elemento existente.
A continuacin, seleccione el archivo de confguracin App.confg en el directorio desde el
que ejecut SvcUtil.exe en el paso anterior. (El archivo se llama App.confg porque se us
el modifcador /confg:app.confg al generarlo con la herramienta Svcutil.exe.) Haga clic en
Aceptar. De forma predeterminada, el fltro del cuadro de dilogo Agregar elemento exis-
tente descarta todos los archivos con extensin .confg. Para ver estos archivos, seleccione
Todos 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 confguracin generado. Svcutil.exe genera valores para cada ajuste
del enlace. El siguiente ejemplo es una vista del archivo de confguracin generado.
Bajo la seccin <system.serviceModel>, busque el elemento <endpoint>. El siguiente
archivo de confguracin es una versin simplifcada del archivo generado.
Este ejemplo confgura 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 especifca que el contrato Microsoft.ServiceModel.Samples.
ICalculator se utiliza para la comunicacin que est confgurada con el WsHttpBinding pro-
578
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
porcionado por sistema. Este enlace especifca HTTP como el transporte, la seguridad inte-
roperable y otros detalles de confguracin.
Ahora se ha confgurado 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 confgurado un proxy de Windows Communication Foundation (WCF)
se puede crear una instancia de cliente, y la aplicacin de cliente se puede compilar y utilizar
para comunicar con el servicio WCF. En este tema se describen los procedimientos para
crear 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 se
debera 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.
579
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Para ejecutar el cliente, haga clic con el botn secundario en Cliente en el Explorador de
soluciones y elija Depurar, Iniciar nueva instancia.
Bibliografa
Application Architecture Guide v2
apparchguide.codeplex.com/
What is Windows Communication Foundation? Framework 3.5 [Online]
http://msdn.microsoft.com/en-us/library/ms731082(v=vs.90).aspx
What is Windows Communication Foundation? Framework 4.0 [Online]
http://msdn.microsoft.com/en-us/library/ms731082.aspx
Getting Started Tutorial [Online]
http://msdn.microsoft.com/en-us/library/ms734712(v=VS.90).aspx
580
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
ASP.NET MVC
1 Introduccin
ASP.NET MVC es un framework para la construccin y desarrollo de aplicaciones web
que 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 es
que ASP.NET es, en s mismo, un complejo framework extensible para el desarrollo de
aplicaciones web.
No fue sino hasta el ao 2007 que se anunci ASP.NET MVC, y ya en ese momento el
patrn MVC se estaba convirtiendo en una de las formas ms utilizadas para la construccin
de web frameworks.
1.1 El patrn MVC
Es uno de los patrones arquitectnicos de software ms importantes en la actualidad y
lo viene siendo desde hace muchos aos. Es una poderosa y elegante forma de separar los
distintos aspectos concernientes a una aplicacin. Si bien es cierto que agrega una pequea
cantidad de complejidad al diseo de una aplicacin, los benefcios que otorga hacen que el
esfuerzo 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 cambiados
y manejados.
2. La vista: Defne cmo la interface de usuario (UI) ser desplegada.
3. El controlador: Un conjunto de clases que maneja la comunicacin del usuario, sobre
todo el fujo de la aplicacin y la lgica especfca de la aplicacin.
1.2 El patrn MVC aplicado a Web Frameworks
El patrn MVC se ha vuelto, en los ltimos tiempos, extremadamente popular aplicado
a distintos web frameworks en distintas plataformas de ejecucin. En ASP.NET MVC se
puede 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, as
como tambin el cdigo necesario para la manipulacin de los datos. En ASP.NET MVC se
traduce 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.
581
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 el
sufjo 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 dentro
del problema que quiere resolver, es decir, un ambiente carente de estado (stateless) como lo
es 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 Web
Application:
582
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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, seleccionaremos
Razor.
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:
583
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Y en el navegador se abrir la pgina principal de nuestra nueva aplicacin:
3 Entendiendo la estructura de la aplicacin
ASP.NET MVC
Una vez creada la aplicacin podemos observar que en el Visual Studio, debajo de nuestra
solucin, se cre toda una estructura de directorios muy particular:
La siguiente tabla detalla los distintos directorios y su funcin:
584
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Esta estructura tiene su razn de ser y est enmarcada en algo llamado Convention over
Confguration, un tema que retomaremos un poco ms adelante, pasando primero a mostrar
en 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 controlador
de la pgina principal, el encargado de mostrar la(s) vista(s) principal(es) de nuestra aplicacin
y responder a los pedidos que el usuario realice desde all. El AccountController es, por su
parte, 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 las
distintas vistas creadas por el proyecto por defecto (Figura 9).
585
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
En el directorio /Content se encuentra un archivo CSS, Site.css, que es utilizado para
agregar estilos css a todo el sitio. Por su parte, en el directorio /Scripts se agregaron varias
libreras 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 confgurando y especifcando cosas que ya
pueden ser inferidas basadas en convenciones, es decir, acuerdos sobre distintos aspectos
como ser nombres, directorios, etc., de nuestra aplicacin.
Por ejemplo, para resolver las vistas, ASP.NET MVC utiliza una convencin basada en los
directorios de la estructura, lo que permite omitir la localizacin exacta de la vista cuando se
referencia 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 confguration
El concepto de Convention over confguration se hizo popular gracias a otro framework
para 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
Views
Estos nombres no necesitan ser confgurados en el archivo de confguracin de la aplica-
cin, el archivo web.confg, 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 (con
excepcin del sufjo 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 Modifcacin) de Productos almacenados en una base de datos.
Por simplicidad, vamos a acceder a la base de datos utilizando Linq To SQL.
586
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
5.1 Modelo
En nuestra carpeta de modelos creamos una clase llamada ProductosModels, que va a ser
la 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 siguiente
estructura:
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 completar
el acceso a los datos.
587
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 y
crear 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
588
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
que ingresar el nombre del controlador, ProductosController en nuestro caso, y veremos en
la parte inferior algo llamado Scaffolding options. Scaffolding es una tcnica muy popular
en los frameworks MVC y, bsicamente, sirve para automatizar en cierta medida algunos de
los pasos comunes al momento de realizar el alta, baja y modifcacin de una determinada
entidad de software. En nuestro caso elegiremos Controller with empty read/write actions:
Luego de realizada esta accin tendremos nuestro propio controlador, con cierto cdigo
generado por el propio Visual Studio, como se muestra a continuacin:
589
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
590
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Es necesario en este momento detenerse a analizar el cdigo que obtuvimos. Como se
observa, 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 clase
abstracta 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, realizando
las tareas apropiadas y retornando la vista generada al usuario (navegador, cliente, etc.) que
invoc 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, la
metadata [HttpPost] en la parte superior de la declaracin de la accin. Esto permite, por
ejemplo, separar los casos en los cuales se quiere visualizar los datos existentes mediante un
pedido GET del caso que se quiera modifcar los datos mediante un POST.
Vamos ahora a completar el controlador implementando dos acciones: Index y Create. En
el 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 base
de datos, enviando los datos desde la vista hacia el modelo.
591
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 decisiones
dependiendo 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 contenido
es todos aquellos valores que se ingresaron en el formulario por parte del usuario. De esta
forma, el controlador obtiene esos valores (pudiendo, otra vez, realizar las acciones que crea
conveniente) y crea un ProductoDTO para poder enviar al modelo, que va a ser el encargado
en defnitiva de efectivamente ingresar los datos en la base de datos.
592
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 la
informacin al usuario, y aqu radica la importancia de las mismas.
Para seguir nuestro ejemplo, vamos otra vez a aprovechar las ventajas del scaffolding al
momento de crear nuestras vistas.
Empecemos con la vista principal de nuestra aplicacin, que en nuestro caso va a ser el
Index, 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 directorio
Views (recordemos la seccin de las convenciones). En el subdirectorio Productos, hacemos
click 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 en
la vista, como se explic en el punto anterior.
En Scaffold Template podemos elegir entre varias opciones para el tipo de template a
utilizar, 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.
593
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
En este momento ya tenemos creada nuestra vista, si presionamos F5 podremos correr
nuestra aplicacin y dirigirnos a http://localhost:[puerto]/Productos/Index para acceder al
listado de productos de nuestra aplicacin:
Como se observa, en este momento el listado se encuentra vaco, por lo que es necesario
agregarle nuevos datos. Para ello, necesitamos crear la vista Create. Siguiendo los pasos como
se describieron anteriormente podemos generar la siguiente vista:
594
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Con la que podremos ahora s crear nuestros datos. Para ello, ingresamos los distintos
datos y presionamos el botn Create, el cual llamar a la accin del controlador Create, que
se comunicar con el modelo para crear el producto correctamente.
Para nuestro ejemplo ingresamos nicamente dos datos, con lo cual nuestro listado se
vera de la siguiente forma:
Solamente quedara agregar, entonces, las vistas para la edicin, los detalles y el borrado de
un 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/mvc3
Creating Model clases with Linq To SQL [ltima visita: Noviembre 2011]
http://www.asp.net/mvc/tutorials/creating-model-classes-with-linq-to-sql-cs
Scott 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_object
Scaffolding [ltima visita: Noviembre 2011]
http://en.wikipedia.org/wiki/Scaffold_%28programming%29
595
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
ASP.NET MVC
1 Introduccin
Ya hemos visto el funcionamiento y la arquitectura general de una aplicacin ASP.NET
MVC. Ahora vamos a enfocarnos en entender ms en profundidad a los controladores y las
vistas 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 profundidad
en lo que refere 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 en
el modelo apropiadamente a la entrada realizada por el usuario.
De esta forma, los controladores manejan el fujo de la aplicacin, trabajan con los datos
ingresados 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 pedido
por parte del usuario, pginas HTML estticas alojadas en el propio servidor. Luego de un
tiempo 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 pedido
realizado se identifca qu controlador y qu accin del mismo es necesario instanciar
1
y pro-
vee los argumentos necesarios para instanciar dicho mtodo. Es este mtodo el que decide
qu 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 en
el 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 framework
retorna 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 propio
Visual 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 base
para todas las caractersticas necesarias para que un desarrollador implemente un controla-
dor, sin preocuparse de cosas como el ruteo, por ejemplo.
1
Este comportamiento se conoce como Routing (mecanismo de ruteo), y se ver ms detalladamente un poco ms adelante.
596
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 parmetros
extrados 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 ser
los 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 los
mtodos 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 identifcador del producto que se quiere editar
explcitamente como parmetro. Es posible replicar la forma de recibir los datos, pero de esta
manera ciertos datos (como el identifcador) se manejan de forma ms explcita y permite,
adems, armar una ruta al producto del estilo:
597
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 identifcador de producto {id}.
2.3 Generando la respuesta al usuario
Luego que el controlador termina de procesar un request, por lo general es necesario
generar 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 simplifcar la utilizacin de los distintos Action-
Result existentes.
La siguiente tabla muestra los action result ms comnmente utilizados:
598
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
2.3.1 Retornando HTML para mostrar en una vista
La ms comn de las respuestas desde un action method es generar HTML y enviarlo
al navegador. Utilizando las Action Results esto se realiza creando una instancia de la clase
ActionResult que especifca la vista que se quiere desplegar con el fn 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 action
method 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,
599
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
id = 5
});
}
Tambin podemos redirigir a un action method especifco, 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 el
mismo 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 necesitar
generar 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 codifcacin, en este caso se utiliza la codifcacin 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),
600
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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:
<Productos>
<Producto Id=0 Nombre=Producto 0 Descripcion=Descripcion 0 Stock=150
/>
<Producto Id=1 Nombre=Producto 1 Descripcion=Descripcion 0 Stock=500
/>
</Productos>
Hoy en da es muy comn, para trabajar en conjunto con JavaScript, utilizar JSON para
retornar los datos. Por suerte, ASP.NET MVC provee un helper que ahorra mucho trabajo a
la 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 datos
Json. Para deshabilitar esta opcin, se utiliza el segundo parmetro del helper con el valor
JsonRequestBehavior.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 del
usuario enviando datos binarios, como puede ser por ejemplo un archivo.
Para estos casos, ASP.NET MVC provee un helper cuyo fn especfco 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 fleName = @c:\ASPNETMVC_1.pdf ;
string contentType = application/pdf ;
string downloadName = ASPNETMVC_1.pdf ;
return File(fleName, contentType, downloadName);
601
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
}
Al momento de invocar al action method GetFile, el navegador va a mostrar una ventana
para 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 forma
return 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 realizar
esto, 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()
602
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
{
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;
}
<h2>@ViewBag.Message</h2>
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 ayuda
se 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 defnir propiedades arbitrarias en un objeto dinmico (el
ViewBag) 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;
}
603
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
<h2>@ViewBag.Message</h2>
<h3>@ViewBag.Date</h3>
La desventaja de usar el ViewBag es el hecho de que no hay forma de saber en tiempo
de 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 se
corresponde a desplegar las distintas vistas de nuestra aplicacin.
Si bien hemos visto varios pequeos ejemplos de vistas, ahora se va a entrar ms en detalle
de 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 forma
de mejorar la performance. Para esto, las vistas se traducen a cdigo C#, para posteriormente
ser compiladas. Esto es lo que permite que sea tan sencillo incluir cdigo C# embebido en
las propias vistas.
Las vistas son compiladas al momento de ser utilizadas por primera vez, y las clases
compiladas se almacenan en el disco, hasta el momento en que la vista cambie y se necesite
recompilar.
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 la
interfaz 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 distinto
para cada pedido.
Existen tres tcnicas principales para agregar contenido dinmico a las vistas en ASP.NET
MVC:
2
El motor Razor Engine fue introducido en ASP.NET MVC, pudiendo elegirse el motor por defecto de ASP.NET en su
lugar, o cualquier otro motor implementado por terceros, o por uno mismo, pero esto escapa al alcance de este documento.
604
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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:
<ul>
@for (int i = 0; i < 10; i++){
<li>@i </li>
}
</ul>
Si quisiramos embeber varias lneas, lo que haramos es rodear el bloque de cdigo con
un @{ 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 defnicin de un formulario:
@{ Html.BeginForm(Edit, Home); }
@{ Html.EndForm();}
Estos tags generan el siguiente cdigo HTML:
<form action=/Home/Edit method=post>
</form>
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:
605
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
3.1.3 Utilizando vistas parciales
Pueden darse escenarios donde sea necesario utilizar los mismos fragmentos de cdigo
en distintas vistas a lo largo de toda nuestra aplicacin web. Para que sea nuestra aplicacin
mucho 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 cdigo
que 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, es
un checkbox que permite crear una vista parcial.
Una vez creada la vista parcial, para utilizarla en alguna vista principal, lo que se tiene que
hacer 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
606
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
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 invocan
acciones necesitan que sean generados correctamente, de forma que invoquen al controlador
y accin que necesite.
Las rutas en un proyecto de ASP.NET MVC se defnen en el archivo Global.asax de la
solucin.
En la solucin, por defecto, el mapeo de las rutas se defne 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 parameters
new { controller = Home, action = Index, id = UrlParameter.Optional }
// Parameter defaults
);
}
Lo importante ac es la lnea que comienza con routes.MapRoute. En ella se indica cmo
se 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/
607
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Silverlight
1 Introduccin
El desarrollo de aplicaciones se puede dividir en dos partes bien diferenciadas. Por un
lado, se encuentra el desarrollo de la aplicacin en s, con toda la lgica necesaria para su
correcto 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 necesario
para que dicha aplicacin presente al usuario fnal una interfaz usable y atractiva.
En diciembre de 2006 Microsoft haca pblica la primera versin CTP de Silverlight, una
nueva 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, est
disponible 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 usados
para mostrar informacin y aceptar entrada de usuario. Presentation Logic Components: el
cdigo de la aplicacin que defne 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 componentes
de Presentation Entity que encapsulen la lgica de negocios y datos.
608
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T

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. Los
siguientes principios ayudan a que el diseo de una aplicacin siga las mejores prcticas y se
cumplan 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 Silverlight
Microsoft Silverlight es una plataforma de desarrollo de Microsoft que permite desarro-
llar aplicaciones ricas. Silverlight funciona sobre varias plataformas y mltiples exploradores
y 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 con
alcance multiplataforma, buenos grfcos y soporte rich media:
609
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Usar el patrn Presentation Model (Model-View-ViewModel). [11]
Variacin de Model-View-Controler (MVC) pensado para plataformas de desarrollo
donde la vista es responsabilidad de un diseador en lugar del desarrollador.
Si se diseara una aplicacin que evolucionar, usar la Patterns & practices Composite
Client Application Guidance. [12] Si se desea incluir en una aplicacin Web islas con conte-
nido rich media e interacciones considerar Controles Silverlight con ASP.NET.
2.2 Para qu tipo de aplicaciones?
Luego de identifcar qu tipo de UI es adecuada para la aplicacin a desarrollar es necesa-
rio seleccionar una tecnologa para los componentes de UI. En general, esta decisin depen-
de del tipo de UI seleccionada. A continuacin se menciona para qu tipo de UI es apropiado
utilizar Silverlight. [1] UI para clientes de dispositivos mviles.
Silverlight for mobile. Requiere la instalacin del plug-in Silverlight en el dispositivo
mvil. Esta tecnologa es til cuando se desea:
portar una aplicacin Silverlight existente a un dispositivo mvil,
crear una UI ms rica que la lograda con otras tecnologas: RIA UI.
Silverlight. Es un subconjunto de WPF (ver seccin 3.1) que tiene soporte sobre varias
plataformas y navegadores. Comparado con otras tecnologas (ej. XBAP) es ms chico y r-
pido de instalar. Es una buena eleccin para aplicaciones grafcas que no requieran:
tanto soporte grfco como WPF,
instalacin de la aplicacin en el cliente,
Silverlight con AJAX. Silverlight soporta de forma nativa Asynchronous JavaScript
and XML (AJAX). Se puede utilizar para permitir interaccin entre componentes de la pgi-
na Web y la aplicacin Silverlight.
Aplicaciones Web:
ASP.NET Web Forms con controles Silverlight. Si se tiene una aplicacin ASP.NET
se pueden utilizar controles Silverlight para proveer mejor experiencia de usuario en cuanto
visualizacin y capacidades de la UI, evitando escribir una aplicacin Silverlight completa-
mente nueva. Es una buena tcnica para agregar soporte rich media a una aplicacin Web
existente. Los controles Silverlight y la pgina pueden interactuar en el cliente usando JavaS-
cript.
2.3 Qu tipo de aplicaciones permite crear?
Si bien su principal caracterstica es crear experiencias atractivas, interactivas de usuario
para aplicaciones web, entre otras, no solo se limita a aplicaciones de grfcos intensivos en
la web sino que permite desarrollar todo tipo de aplicaciones en la web, el escritorio (gra-
cias a sus caractersticas Out of the Browser - OOB), en dispositivos mviles y embebidos,
cuando estn en lnea o fuera de lnea. Se pueden crear aplicaciones para: La Web: aplicacin
Silverlight clsica multi-navegador; El Escritorio: Silverlight OOB en Windows, MAC OSX;
Dispositivos mviles: Windows Phone 7; Dispositivos embebidos: Windows Embedded CE
platform 7.0.
610
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Da soporte de grfcos vectoriales, archivos multimedia, textos, animaciones y capas su-
perpuestas. Se integra con infraestructura y aplicaciones existentes que incluyen Apache,
PHP, as como JavaScript y XHTML en el cliente.
2.4 Herramientas tiles
Las principales herramientas para trabajar con Silverlight son Visual Studio y Microsoft
Expression Blend. [8] Ambas permitirn disear y desarrollar aplicaciones Silverlight, aunque
esto no quiere decir que sean iguales. Visual Studio es una herramienta ms orientada a los
desarrolladores y testers de aplicaciones, mientras que Expression Blend sera una herra-
mienta pensada para diseadores, sin embargo, para desarrolladores resulta til tambin a la
hora de trabajar con los estilos, animaciones y con las interfaces de usuario. [3]
Para desarrollar con Silverlight se recomienda trabajar con Visual Studio 2010. Para ins-
talar el runtime para el desarrollo de Silverlight 4, el soporte para proyectos Silverlight 4
en Visual Studio y el Silverlight 4 SDK, es necesario instalar las Silverlight Tools for Visual
Studio 2010. [5]
Para probar la aplicacin en otra mquina que no sea en la cual se desarrolla, habr que
instalar el correspondiente runtime: Windows Runtime [6] o Mac Runtime [7].
Existe un Silverlight Toolkit [9] compuesto por numerosos controles, estando el cdigo
fuente disponible.
Microsoft WCF RIA Services [10] simplifca el patrn tradicional de aplicaciones de n-
capas para reunir a las plataformas de ASP.NET y Silverlight. Los servicios de RIA propor-
cionan un patrn para escribir la lgica de la aplicacin y que se ejecute en el nivel intermedio,
controlando el acceso a datos para las consultas, los cambios y operaciones personalizadas.
Tambin admite soporte para tareas comunes tales como la validacin de datos, autentica-
cin y roles mediante la integracin con componentes de Silverlight en el cliente y ASP.NET
en el nivel intermedio.
2.5 Posibilidades que ofrece Silverlight
Es importante conocer el abanico de posibilidades que ofrece Silverlight a los desarrolla-
dores.
A continuacin se vern, a grandes rasgos, los aspectos relativos a la arquitectura de Sil-
verlight.
La siguiente imagen ilustra dicha arquitectura:
Silverlight soporta dos modelos de programacin unifcados en un solo plug-in, el modelo
de desarrollo en JavaScript y el desarrollo, haciendo uso de la API de .NET. [3]
611
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
2.6 Componentes de Silverlight
Entre los componentes del ncleo de presentacin de Silverlight se encuentran los
siguientes:
La gestin de entrada desde dispositivos de hardware como, por ejemplo, el ratn, el
teclado, el lpiz de dibujo, entre otros.
El motor de dibujo (Render) que se encarga de mostrar y actualizar los elementos que
son mostrados en la pantalla, como pueden ser grfcos vectoriales, imgenes, videos, textos,
entre otros.
Las caractersticas de gestin de archivos multimedia de audio y video.
El modelo de controles extensibles que se puede personalizar mediante estilos y plan-
tillas.
Una gestin de lienzos (Layout) que permite controlar dinmicamente la posicin en
pantalla de los elementos que son mostrados como parte de la interfaz de usuario.
La gestin de derechos de medios digitales (DRM).
El motor de enlace a datos es una pieza muy importante de este ncleo, ya que habili-
ta crear enlaces a datos desde objetos (Data Objects) a controles de la interfaz de usuario
(UIElements).
El parser de XAML.
Todos estos componentes forman parte de un ncleo sobre el que se asientan las dems
caractersticas que proporciona Silverlight y, por s solas, proporcionan una serie de herra-
mientas para la creacin de interfaces de usuario ricas y usables, as como de aplicaciones de
612
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
lnea de negocio clsicas y aplicaciones para dispositivos mviles y embebidos.
3 Silverlight OOB o WPF?
Histricamente cuando pensamos en una aplicacin de escritorio tomamos como refe-
rente tecnologas como WinForms o Windows Presentation Foundation (WPF).
WPF es la tecnologa padre de Silverlight y, por lo tanto, tiene la mayora de equivalencias
en desarrollo. [3]
3.1 Qu es WPF?
Windows Presentation Foundation (WPF) es un subsistema de presentacin unifcado
para Windows expuesto mediante WinFX, el modelo de programacin de cdigo adminis-
trado para Windows Vista que extiende Microsoft .NET Framework.
WPF se compone de un motor de visualizacin y un marco de cdigo administrado.
WPF unifca la forma en que Windows crea, muestra y manipula documentos, elementos
multimedia e interfaces de usuario (UI), lo que permite a programadores y diseadores crear
experiencias de usuario diferenciadas.
Windows Presentation Foundation se basa en el cdigo administrado, pero usa un len-
guaje de marcado, el lenguaje de marcado de aplicaciones extensible (XAML), para que la
generacin de aplicaciones sea ms simple para los diseadores.
Las aplicaciones basadas en XAML son compatibles actualmente con C# y Visual Basic
.NET. Si escribe una aplicacin WPF entera con cdigo procedural puede usar cualquier
lenguaje CLR (Common Language Runtime).
WPF solo permite la ejecucin en plataformas Windows a partir de la versin SP2 de
Windows XP, lo que limita la cantidad de plataformas soportadas por esta tecnologa.
En contraposicin, WPF tiene una implementacin completa de todas las API comunes
de desarrollo de aplicaciones, incluidas las API de acceso a datos, por ejemplo. [3]
3.2 Consideraciones generales de Silverlight
Microsoft est apostando en posicionar Silverlight como la tecnologa de referencia para
aplicaciones que se ejecuten tanto en Web como en el escritorio, en dispositivos mviles
(Windows Phone 7) y en dispositivos embebidos (Televisores, reproductores multimedia,
entre otros).
Silverlight, al ser un subconjunto de las funcionalidades de WPF, no proporciona todas
las API de desarrollo comunes, como puede ser el caso de las API de ADO.Net y similares
para el trabajo con bases de datos, as como las funcionalidades comunes para el trabajo con
el sistema de archivos.
El modelo de acceso a datos de una aplicacin Silverlight OOB pasa por una arquitectura
basada en servicios. [3]
613
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
3.3 Cul escoger?
Como resumen general, se puede concluir que, si la aplicacin a desarrollar utilizar una
base de datos local o un trabajo intensivo con el sistema de archivos, la opcin lgica ser
WPF; mientras que, si la aplicacin se basa en un modelo de servicios y no se hacen trabajos
con el sistema de archivos (salvo carpetas de usuario), la opcin ms fuerte ser Silverlight.
La siguiente tabla muestra en detalle estas diferencias.
4 Silverlight para escritorio
El primer paso para trabajar con una aplicacin fuera del navegador consiste en habilitar
dicha caracterstica. Se deber abrir la pestaa de propiedades del proyecto Silverlight en Vi-
sual Studio y dirigirnos a la seccin Silverlight de la misma.
Marcar la opcin Enable running application out of the browser agregar un nuevo
archivo en la carpeta Properties del proyecto llamado OutOfBrowserSettings.xml donde
se almacenarn las caractersticas propias de la aplicacin tales como el ttulo de la ventana,
614
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
el tamao de la misma, los iconos que usar la aplicacin una vez desplegada en el escritorio,
entre otras.
El botn Out-of-Browser Settings de la pestaa Silverlight brinda acceso al editor de
las caractersticas de la aplicacin como se muestra en la siguiente Figura.
Las opciones que marquemos en dicha ventana se traducirn en el documento XML que
se muestra a continuacin, como ejemplo de confguracin, archivo OutOfBrowserSettings.
xml:
4.1.1 Instalar aplicaciones OOB
Silverlight incluye un mecanismo que gestiona el proceso de instalacin y desinstalacin
de las aplicaciones en el escritorio.
615
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Para instalar una aplicacin Silverlight en el escritorio se puede hacer clic con el botn
secundario del ratn sobre la aplicacin dentro del Navegador Web y pulsar sobre la opcin
Install MyAPP Application onto this computer.
Esta accin mostrar un dilogo que preguntar por las localizaciones en las que el usua-
rio desea crear un acceso directo a la aplicacin. Confrmando dicha accin la aplicacin
Silverlight quedar instalada y lista para ser usada desde el escritorio.
Esto mismo se puede realizar por cdigo:
Haciendo uso del mtodo de instancia de la aplicacin actual App.Current.Install() se
puede instalar de forma procedural la aplicacin. En el ejemplo anterior, la instancia del
objeto aplicacin actual tambin informa del estado actual de la misma, esto permite validar
si la aplicacin ya se encuentra instalada o si la instalacin ha fallado antes de proceder a su
instalacin. Esto se realiza consultando el valor de InstallState (App.Current.InstallState).
Se cuenta con cuatro valores correspondiente a los estados. El evento al que hay que res-
ponder es App.Current.InstallStateChanged.
A continuacin se muestra un ejemplo de uso:
616
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
De forma similar se puede comprobar si existen versiones actualizadas de la aplicacin
actual. La instancia actual del objeto aplicacin tambin dispone de un mtodo que permi-
te realizar dicha comprobacin. Dicho mtodo es App.Current.CheckAndDownloadUpda-
teAsync().
Este mtodo realiza la comprobacin de si existe en el servidor una versin ms reciente
de la aplicacin y, si as fuese, descarga esa nueva versin.
La ejecucin de App.Current.CheckAndDownloadUpdateCompleted permite descubrir
errores o informar de la existencia y actualizacin a una nueva versin.
Para comprobar si existe una versin ms reciente de la aplicacin:
Para verifcar el resultado de dicha operacin:
Para realizar la suscripcin a los eventos mencionados con anterioridad:
Para desinstalar la aplicacin se puede hacer clic con el botn derecho del ratn sobre la
aplicacin y pulsar sobre la opcin Remove this application.... Esto eliminar completa-
mente la aplicacin del sistema.
617
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
4.1.2 Ejecucin
Una aplicacin ejecutada fuera del navegador se ejecuta en una parcela de seguridad al
igual que ocurre cuando se ejecuta dentro del navegador. Al ejecutarse en un contexto de
seguridad de Internet no es posible disponer de acceso completo a todos los recursos del
sistema, por lo que una aplicacin Silverlight en ningn caso puede sustituir a una aplicacin
de escritorio, como puede ser el caso de una aplicacin creada con WPF. No es necesario
disponer de permisos de administrador en el equipo para poder proceder a la instalacin de
una aplicacin Silverlight.
5 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].
MSDN - Centro de desarrollo de Silverlight [Online]. Available: http://msdn.microsoft.
com/es-es/silverlight [Accessed: 20-Aug-2011].
Sitio de Silverlight [Online]. Available: http://www.silverlight.net/ [Accessed: 15-Nov-
2011].
Silverlight Tools for Visual Studio 2010. [Online]. Available: http://www.mi-
crosoft.com/downloads/es-es/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-
b67c2604a139&displayLang=es [Accessed: 20-Nov-2011].
Windows Runtime. [Online]. Available: http://silverlight.dlservice.microsoft.com/
download/F/6/5/F653F7FD-AD4D-411D-8B1F-9C4B1BD69881/Silverlight_Developer.
exe [Accessed: 19-Nov-2011].
Mac Runtime. [Online]. Available: http://silverlight.dlservice.microsoft.com/
download/F/6/5/F653F7FD-AD4D-411D-8B1F-9C4B1BD69881/Silverlight_Developer.
dmg [Accessed: 19-Nov-2011].
Expression Blend. [Online]. Available: http://www.microsoft.com/expression/pro-
ducts/blend_overview.aspx [Accessed: 19-Nov-2011].
Silverlight Toolkit. [Online]. Available: http://silverlight.codeplex.com [Accessed: 19-
Nov-2011].
WCF RIA Services. [Online]. Available: http://www.silverlight.net/learn/advanced-tech-
niques/wcf-ria-services/get-started-with-wcf-ria-services [Accessed: 19-Nov-2011].
Martin Fowler, Presentation Model, 13 Julio 2004 [Online]. Available: http://martin-
fowler.com/eaaDev/PresentationModel.html [Accessed: 20-Nov-2011].
Microsoft, Prism, Noviembre 2010 [Online]. Available: http://msdn.microsoft.com/en-
us/library/cc707819.aspx [Accessed: 20-Nov-2011].
618
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
619
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Laboratorio de Integracin de Sistemas
Introduccin a .NET Framework
Agenda
Qu es .NET Framework?
Componentes Fundamentales
Funcionamiento Interno del CLR
Bibliotecas Principales
Caractersticas de .NET
Herramientas de Desarrollo .NET
Lab. Punto de venta
Qu es .NET Framework?
Tecnologa de desarrollo de aplicaciones empresariales, compuesta de:
Entorno de Ejecucin (Runtime).
Bibliotecas de Funcionalidad (Class Library).
Lenguajes de Programacin.
Visual Basic.
C#.
F#.
C++.
Compiladores.
Herramientas de Desarrollo (IDE VS2010 & Tools).
Guas de Arquitectura.
Plataforma de Ejecucin Intermedia
Agenda
Qu es .NET Framework?
Componentes Fundamentales
Arquitectura
620
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Common Language Runtime (CLR)
Microsoft Intermediate Language (MSIL)
Assemblies
.NET Class Library
Common Language Specifcation (CLS)
CLR - Arquitecturas de Ejecucin de Aplicaciones
Arquitectura del .NET Framework
CLR Common Language Runtime
El CLR es el motor de ejecucin (runtime) de .NET.
Caractersticas.
Compilacin Just-In-Time (JIT).
Gestin automtica de memoria (Garbage Collector).
Gestin de errores consistente (Excepciones).
Ejecucin basada en componentes (Assemblies).
Gestin de Seguridad.
Multithreading.
621
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
CLR Componentes Internos
CLR Proceso de Compilacin
CLR - MSIL
Qu es un Assembly?
Un Assembly es la unidad mnima de ejecucin, distribucin, instalacin y versionado
de aplicaciones .NET
622
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Assemblies - Aplicaciones .NET
Uno o ms Assemblies (.dll, .exe).
Al ejecutar una aplicacin, cmo ubico los assemblies necesarios?
El Class Loader busca en el directorio local (preferido).
Global Assembly Cache (GAC).
Diferentes aplicaciones pueden usar diferentes versiones.
Actualizaciones ms simples.
Desinstalacin ms simple.
NET Framework Class Library
Conjunto de Tipos bsicos (clases, interfaces, etc.) que vienen incluidos en el .NET
Framework.
Los tipos estn organizados en jerarquas lgicas de nombres denominados NAMES-
PACES.
Los tipos son INDEPENDIENTES del lenguaje de desarrollo.
Es extensible y totalmente orientada a objetos.
.NET Framework Class Library
Agenda
Qu es .NET Framework?
Componentes Fundamentales
Funcionamiento Interno del CLR
Modelo de Ejecucin
Common Type System
623
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Modelo de Ejecucin del CLR
CTS (Common Type System)
Defne un conjunto comn de tipos de datos orientados a objetos.
Todo lenguaje de programacin .NET debe implementar los tipos defnidos por el CTS.
Todo tipo hereda directa o indirectamente del tipo System.Object.
Defne Tipos de VALOR y de REFERENCIA.
La Memoria y los Tipos de Datos
El CLR administra dos segmentos de memoria: Stack (Pila) y Heap (Montn).
El Stack es liberado automticamente y el Heap es administrado por el GC (Garbage
Collector).
La Memoria y los Tipos de Datos.
Los tipos VALOR se almacenan en el Stack.
Los tipos REFERENCIA se almacenan en el Heap.
624
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Agenda
Qu es .NET Framework?
Componentes Fundamentales
Funcionamiento Interno del CLR
Bibliotecas Principales
Caractersticas de .NET
Caractersticas de .NET
Entorno de Ejecucin robusto y seguro:
Gestin automtica de memoria.
Manejo de excepciones.
Independiente del lenguaje de programacin.
Libertad en la eleccin del lenguaje (o mixto).
Herramientas de desarrollo compartidas.
Interoperabilidad con cdigo existente:
Unmanage code .COM.
Simplifca la instalacin y administracin de las aplicaciones:
GAC, mltiples versiones.
Extensible:
Las clases pueden ser extendidas usando herencia.
Herencia entre distintos lenguajes.
Interoperabilidad
Qu es .NET Framework?
Componentes fundamentales
Funcionamiento interno
Bibliotecas Principales
Ventajas de .NET
625
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Herramientas de Desarrollo .NET
Visual Studio 2010.
SQL Server 2010 Express.
SQL Server Managment Studio.
IIS7.
Microsoft Visual Studio 2010
Solucin es un contenedor de proyectos.
Proyecto es un contenedor de: archivos fuente, conexiones a base, recursos, etc.
Diferentes tipos de proyectos (VS Projects Templates).
rea editor o diseador, depende del tipo de archivo que se est usando.
SQL Server Management Studio
626
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
SQL Server Management Studio es un entorno integrado para obtener acceso a todos
los componentes de SQL Server, confgurarlos, administrarlos y desarrollarlos.
Con SQL Server Management Studio el programador y el administrador de bases de
datos pueden desarrollar o administrar cualquier componente del Motor de base de datos.
Agenda
Qu es .NET Framework?
Componentes Fundamentales
Funcionamiento Interno del CLR
Bibliotecas Principales
Caractersticas de .NET
Herramientas de Desarrollo .NET
Lab. Punto de venta
Lab 0
Invocamos al compilador C# con:
>csc Holamundo.cs
Lab. Punto de venta
La aplicacin Punto de venta posee una arquitectura en tres capas (presentacin, re-
glas de negocios y acceso a datos).
Funcionalmente, la aplicacin permite:
Listar una serie de productos disponibles para vender.
Iniciar una nueva venta.
Agregar un tem a la venta (se agrega un producto al carrito de compras).
Listar los productos contenidos en el carrito.
Confrmar la venta (obtenindose el total a pagar).
627
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Cancelar la venta (vaciando el carrito de compras).
Salir (cancelando las ventas no confrmadas).
Lab. POS. Presentacin
Assembly .EXE, proyecto de consola.
Main(), punto de entrada a la aplicacin.
Utiliza el patrn command para las opciones del men.
Este proyecto contiene App.confg (Cadenas de conexin, variables, etc.).
Lab. POS. Reglas de negocio
Assembly .dll, librera.
Clases que representan Entidades (Venta producto, ItemVenta).
Clases que representan maestros de las entidades (CatalogoProductos, CatalogoVentas).
Lab. POS. Acceso a datos
Assembly .dll, librera.
Contiene una clase que encapsula y simplifca el acceso a datos con ADO.NET (Base-
Datos).
Clase que representa un error (BaseDatosexception).
Presentacin: (Proyecto de consola)
Reglas de negocio
Acceso a datos
SQL
SERVER
628
T
a
l
l
e
r

d
e

F
o
r
m
a
c
i

n
.
N
E
T
Lab. Punto de venta
Bibliografa
MSDN .NET Framework 4
ohttp://msdn.microsoft.com/es-es/library/w0x726c2.aspx
DCE
ohttp://mslatam.com/latam/msdn/comunidad/dce2005/
SQL Server Managment Studio
ohttp://msdn.microsoft.com/en-us/library/ms174173.aspx

También podría gustarte