Aplicaciones N-Capas con .NETAplicaciones N-Capas con .NET
PatronesPatrones
Describen problemas/solucionesya “conocidas” y recurrentesFacilitan la comunicaciónAl identificar un patrón, permiten construir un conjunto de conceptos/ soluciones a su alrededor (de aplicabilidad “inmediata”)Se complementanAplicables en distintas áreas de la construcción / implementación de sistemas
““patterns & practices”patterns & practices”Direcciones y guía en temas de arquitectura por parte Direcciones y guía en temas de arquitectura por parte de Microsoftde Microsoft
Disponible online (en inglés): http://www.microsoft.com/practicesLibros disponibles: http://www.amazon.com/practices CD de recursos: http://shop.microsoft.com/practices
Probadas Con autoridad
Precisas
Utilizables
Relevantes
Arquitectura en CapasArquitectura en Capas
Diseñamos una aplicación en capas, donde cada capa expone servicios que otras aplicaciones o capas pueden consumir, y donde cada capa puede consumir servicios de otras
¿Cuáles son las capas y qué componente se coloca en cada capa?
Arquitectura en CapasArquitectura en Capas
A tener en cuenta …- Queremos minimizar los efectos de cambiar una capa- Los servicios se pueden llegar a exponer hacia fuera
del lugar físico o de la empresa- Comunicarse con otros servicios involucra múltiples
protocolos, formatos de datos y conocimientos técnicos- Tratamos de aislar la lógica de negocios de la
tecnología usada para acceder a los servicios
Arquitectura .NETArquitectura .NET
UI Componentes
UI Componentes de Procesos
Componentes de Accesos a Datos
Workflows de Negocio
Componentes de
Negocio
Usuarios
Entidades de Negocio
Agentes de Servicios
Op
era
cio
nes
Seg
urid
ad
Com
un
icacio
nesInterfaces de Servicios
Orígenes de Datos Servicios
Página Web de Presupuestos
Página Webde Inventario
Página Webde Clientes
Manejo de Presupuestos
Cálculode Precios
Manejode Clientes
Utilidades ADO.NETAcceso a Datos
De Presupuestos
Capa de Presentación
Capa de Negocio
Capa de Datos
Arquitectura .NET simpleArquitectura .NET simple
.NET & Windows ADO.NET
PresentaciónLógica negocio & Fábrica Mensajes
Integración ypersistencia de datos
Patrones de Diseño en .NETPatrones de Diseño en .NET
ASPX/MXFront
Controller
ASCX Code
Behind
Base Form
Control
ASPX (ASCX)
XML DataSet
VO
Business Service Proxy
Data Access Proxy
BusinessDelegateAdapter
BusinessDelegateFactory
Business Service Facade
Disconnected DataSet &/or
ObjectSpaces
Data Access Proxy
XML DataSet
VO
C# Assembly& Serviced Component
Serialized XML
DataSet VO
Attributed Connection Pooling &
Transactions
Resources
Database
DirectoryMSMQ
Data Access Object
Request
1. Request
4. Dispatch 2. Fill State3. Validate
16. Redirect
<<uses>>
<<uses>>
<<uses>>
<<supplies>>
5. Get Delegate
6. Execute
7a.ExecuteBiz Method
7b. CRUD Data
17. State?
15. Fill State
18. Response
8.ExecuteBiz Method
9.AssembleData
10b.Get/SetRemove
12.CRUDData
10a.Invoke
13.CRUDData
14.Query
<<creates>>
<<de-serialize>>
To DAO
Response
11a.Get/SetRemove
IIS & ASP.NET
Disconnected DataSet &/or
ObjectSpaces
10c.CRUDData
<<uses>> <<describes>>
11b.CRUDData
XMLAction to Form & Forward
Mappings
MS
MQ
R
WS
MS
MQ
R
WS
Value Object Assembler
.NET & Windows / EJB Container
Otra infrastructuraClave
M
V
C
P OtherPattern
ModelPattern
ViewPattern
ControllerPattern
Event Interceptor Framework
Security Management Framework
Event Notification Framework
Messaging Command
Factory
Filter Interceptors
Service Activation
Message Q& Channel
Locator
<<uses>>
<<uses>>
Arquitectura común de Aplicaciones Arquitectura común de Aplicaciones distribuidasdistribuidasWeb BásicaWeb Básica
Web Clients
Web Farm
UIC
BC
UIP
Data and Services
DAC
Web Farm
UIC
UIP
SI
SA
Web EmpresarialWeb Empresarial
Data and Services
Application Farm
BC
DAC
Web Clients
Escritorio EmpresarialEscritorio
Empresarial
Rich Clients
UIC
UIP
Data and Services
Application Farm
BC
DAC
Web Farm
SI
SA
Web ComplejaWeb Compleja
Data and Services
Application Farm
BC
DAC
Web Clients
Web Farm
UIC
UIP
Uso de las bibliotecasUso de las bibliotecas
Biblioteca HorizontalBiblioteca Horizontal
BibliotecaBibliotecaVerticalVertical
AplicaciónAplicación15%15%
20%20%
65%65%
Source: Mili, et. al., Reuse-Based Software Engineering, Techniques, Organization and Measurement,Source: Mili, et. al., Reuse-Based Software Engineering, Techniques, Organization and Measurement,John Wiley & Sons, Inc., c2002.John Wiley & Sons, Inc., c2002.
Capa de DatosCapa de Datos
Arquitectura .NETArquitectura .NET
UI Componentes
UI Componentes de Procesos
Componentes de Accesos a Datos
Workflows de Negocio
Componentes de
Negocio
Usuarios
Entidades de Negocio
Agentes de Servicios
Op
era
cio
nes
Seg
urid
ad
Com
un
icacio
nesInterfaces de Servicios
Orígenes de Datos Servicios
Data Access Logic ComponentsData Access Logic Components
Objetos sin comportamiento que solo saben guardar un Business Entity en la base de datos.
Generalmente son clases con métodos estáticos.
Utilizan alguna forma de acceso a datos simplificado como Data Access Application Block.
Deben ser llamados por el Business Component de forma que no se tenga en cuenta el origen de los datos.
Realiza todas las conversiones y validaciones necesarias que estén relacionadas con el modelo de base de datos.
Capa de DatosCapa de Datos
Se puede implementar:
- Escribiendo código ADO.NET para cáda método de cada objeto: Create, Open, Update, Delete, Find.
- Escribiendo código con DAAB.- Usando DataAdapter, si se usan DataSets como
Business Entities.- Alguna herramienta de Object Relational Mapping.
DAAB - Data Access Application DAAB - Data Access Application BlockBlock
Versión 2.0 (MSDN / Patterns & Practices)http://msdn.microsoft.com/library/en-us/dnbda/html/daab-rm.asp
Versión 3.1 (GotDotNet)http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c20d12b0-af52-402b-9b7c-aaeb21d1f431
Data Access Application Block
DAAB Abstract Factory (3.x)DAAB Abstract Factory (3.x)
AdoHelper
AdoHelper
SqlServer
SqlServer
OdbcOdbc
……OleDbOleDb
SqlHelper
SqlHelper
Framework de persistencia, basado en Framework de persistencia, basado en objetos, para bases de datos relacionales.objetos, para bases de datos relacionales.
Portado de Hibernate de JavaPortado de Hibernate de Java
Permite mapear tablas y relaciones entre Permite mapear tablas y relaciones entre las mismas a partir de entidades (clases) las mismas a partir de entidades (clases) escritas en c#escritas en c#
Libera al programador de la mayoría de las Libera al programador de la mayoría de las tareas de persistencia de datostareas de persistencia de datos
¿Qué es NHibernate?¿Qué es NHibernate?
ArquitecturaArquitectura
Algunas característicasAlgunas característicasSoporte de:Soporte de:• HerenciaHerencia• PolimorfismoPolimorfismo• Relaciones uno a muchos, muchos a unoRelaciones uno a muchos, muchos a uno• Claves compuestasClaves compuestas• Colecciones de datosColecciones de datos
CacheCache• Varios cache providersVarios cache providers
TransaccionesTransaccionesLazy InicializationLazy InicializationHQLHQLUltima versión disponbibleUltima versión disponbible• 0.8.4.00.8.4.0
Clases – XML – TablasClases – XML – Tablas
Las clases escritas en código se vinculan a las tablas mediante Las clases escritas en código se vinculan a las tablas mediante archivos hbmarchivos hbmLos hbm son xml que determinan mapeos entre las Properties y las Los hbm son xml que determinan mapeos entre las Properties y las columnas de una tabla. columnas de una tabla.
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name=“NombreCompletoClase, NombreAssembly" table=“NombreTabla"> <id name="Id" column=“NombreColumnaKey“ type="String" length="20">
<generator class="assigned" /> </id> <property name=“NombreProperty1“ column= “NombreColumna1" type=“TipoDato1" length="40"/> <property name=“NombreProperty2“ column= “NombreColumna2" type=“TipoDato2" length="40"/> <property name=“NombreProperty3“ column= “NombreColumna3" type=“TipoDato3" length="40"/>
</class> </hibernate-mapping>
LicenciaLicencia
Lesser General Public License (LGPL)Lesser General Public License (LGPL)• Es una “free software licence”.Es una “free software licence”.• Sin embargo es una “strong copyleft licence”Sin embargo es una “strong copyleft licence”- Esta permitido linkearla con módulos que no Esta permitido linkearla con módulos que no
son libres.son libres.GNU y GPL tienen un esquema de “sombrilla”GNU y GPL tienen un esquema de “sombrilla”• Si se utilizan librerias GNU o GPL en proyectos, Si se utilizan librerias GNU o GPL en proyectos,
el producto final debe ser también GNU o GPL el producto final debe ser también GNU o GPL respectivamente. respectivamente.
En cambio la LGPL permite cerrar el código.En cambio la LGPL permite cerrar el código.
Capa de NegocioCapa de Negocio
Arquitectura .NETArquitectura .NET
UI Componentes
UI Componentes de Procesos
Componentes de Accesos a Datos
Workflows de Negocio
Componentes de
Negocio
Usuarios
Entidades de Negocio
Agentes de Servicios
Op
era
cio
nes
Seg
urid
ad
Com
un
icacio
nesInterfaces de Servicios
Orígenes de Datos Servicios
Interfaces de serviciosInterfaces de servicios
Es el punto de entrada de la Capa de NegocioExpone la funcionalidad que otras aplicaciones pueden consumirSe implementa con Servicios Web o Remoting (en caso de aplicaciones distribuidas)Se puede implementar con otras tecnologías: BizTalk Server, Message Queues...
Entidades de NegocioEntidades de Negocio
Son contenedores de datos
Encapsulan y ocultan los detalles de representación de datos
Puede “encapsular” datos que provengan de un Recordset, y luego enviarlos a un XML
No tienen lógica de negocios
Es conveniente distinguir entre instancia y colección de instancias
Entidades de NegocioEntidades de Negocio
Se referencian desde la capa de presentación, desde la interfaz de servicio y desde los componentes de negocioAlternativas- DataSet- DataSet tipado- Objetos (individuales y colecciones)- XML
Componentes de NegocioComponentes de Negocio
Implementación en software de conceptos de negocios
Encapsulan las reglas de negocio de la aplicación, relacionadas con un Business Entity.
Algunos métodos requieren acceder a la base de datos (Capa Datos)
Separación de las Business Entities
Business WorkflowBusiness Workflow
Implementan las actividades de alto nivel del negocio: proceso de una orden de compra, de una facturaSon métodos que no pertenecen a un objeto en particularSe pueden agrupar en objetos o en un objeto por métodoCada método de un Service Interface, accede a un Business Workflow o a un Componentes de Negocio
Capa de PresentaciónCapa de Presentación
Capa de PresentaciónCapa de Presentación
Para muchas aplicaciones se usa la metáfora del formulario/informeHabrá formularios/páginas web de ingreso y modificaciónHabrá formularios/páginas web de vista de datosSon los Componentes de InterfazHay Componentes de Proceso de Interfaz
User Interface ComponentsUser Interface Components
Muestran datos a los usuarios
Adquieren y validan (en alguna medida) la entrada de los usuarios
Interpretan “gestos” del usuario, para ejecutar una acción
NO PARTICIPAN, No hacen nada por sí solos.
Interfaz WindowsInterfaz Windows
Para entornos desconectados o clientes “ricos” (rich clients)
Opciones de implementación más simple:- Windows Forms
Interfaz WebInterfaz Web
ASP.NET Web Forms
Basado en componentes en el servidor
Usa enlace de datos en los controles
Entorno de desarrollo integrado al resto de las soluciones
Amplio manejo de estado y “caching”
Nuevo modelo de Formularios
InfraestructuraInfraestructura
Capa de InfraestructuraCapa de Infraestructura
Son servicios para las aplicacionesDado que no pertenecen a ninguna capa, se definen por fuera aunque en algunos casos se implementen o usen en alguna capa.Son los siguientes:- Seguridad
- AuthZ, AuthN, Comunicación segura, Auditoría, Manejo de Perfiles.
- Operaciones- Manejo de excepciones, Monitoreo, Execución asincrónica,
Metadatos, Configuración.
- Comunicaciones- Formato, Protocolo, Asincronismo.
¿Dudas?¿Dudas?
GraciasGracias