SlideShare una empresa de Scribd logo
Desarrollo en Capas con  “mejorando la productividad y reutilizaciòn” Disertante: Jorge Ercoli (Analista de Sistemas) Jornadas sobre Desarrollo de Software UTN Centro de Estudios Mar del Plata - Argentina
Temario Componentes de software La Lògica del Negocio Arquitectura sin capa de negocio Arquitectura de 3 Capas lògicas.  Responsabilidad de los componentes de cada capa. Capa de Negocio. Ventajas. Patrones: Transaction Script y Domain Model  Capa de Acceso a Datos. Persistencia de objetos de negocio. ORMs, ventajas, patrones: ActiveRecord y DataMapper NHibernate: arquitectura, proceso de desarrollo, uso. BREAK (30 minutos) Desarrollo de software aplicando 3 capas,  “ConferenciaWeb”  sitio de ejemplo usando AspNet 2, C# y Nhibernate  Comprendiendo el còdigo de cada componente: Presentaciòn (Asp Net pages) Procesos de Negocio (Clases controladoras de CU) Objetos de Negocio (Clases que representan las Entidades)  Acceso a Datos (DAOs de los objetos de Negocio)
“ Toda la arquitectura es diseño, pero no todo el diseño es arquitectura.  La arquitectura representa las  decisiones de diseño significativas  que le dan forma a un sistema, donde lo significativo puede ser  medido por el costo del cambio .” Grady Booch
Componentes de Software  Componentes ?? “ E s una pieza de software que realiza una función bien definida, y posee una interfaz bien definida” “ Bloques de construcciòn fìsicos del sistema” * En .NET son los “assemblies” (ensamblados), los cuales pueden ser exe ò dll.
Beneficios de trabajar con componentes La división en componentes  reduce la complejidad , permite la  reutilización  y  acelera el proceso de ensamblaje  de software. (plug-in) Los creadores de componentes pueden  especializarse  creando objetos cada vez mas complejos y de mayor  calidad . La interoperabilidad entre componentes de distintos fabricantes  aumenta la competencia ,  reduce los costos  y facilita la construcción de  estandares Los  costos de mantenimiento  del software se reducen.
Lògica de Negocio “ Procesos y reglas del dominio del negocio, obtenidos en la fase de Análisis del Sistema” Ejemplo para sistema de Gestión de Conferencias “ Inscripciòn de un Oyente a una Conferencia” “ No inscribir nuevos oyentes si se excediò la capacidad del Salon” “ Consultar las Conferencias que poseen vacantes”  “ Registrar altas de nuevos Oyentes” “ Permitir el cambio de Salòn de una Conferencia sòlo cuando la cantidad de inscriptos no supere su capacidad”
Arquitectura sin Capa de Negocio Presentaciòn Acceso a Datos InscribirClick( ) {  conf_Id=ComboConferencia.SelectedValue; oye_Id=LabelOyenteId; dtOyeInsc= sqlExec(“sele * from conf_oye where…”); if (dtOyeInsc.Count()=0) // Oyente inscripto?? Inscriptos=sqlExec(“sele count(*) from conf_oye…”); dtSalon= sqlExec(“sele * from Salon where Id=…”); if (dtSalon(0).Capacidad – Inscriptos > 0) sqlExec(“Insert into conf_oye … values …”); else Mostrar(“No Hay Vacantes !!”); else Mostrar(“Oyente ya inscripto !!”); }
Arquitectura con Capa de Negocio InscribirClick( ) { conf_Id=ComboConferencia.SelectedValue; oye_Id=LabelOyenteId; ProcesoInscrip i=new ProcesoInscrip(); try {  i.Inscribir (conf_Id, oye_Id); } catch (Excepcion ex) }  Negocio Presentaciòn Acceso a Datos
Veamos la aplicación sin capa de negocio: ConferenciaWeb  2 capas ( DataSets Tipados ) Jorge Ercoli  (http://metodologiasdesistemas.blogspot.com)
3 Capas Lògicas Presentaciòn Negocio Acceso a Datos BD Permitir el ingreso de datos del Usuario  Mostrar informaciòn en la IU Capturar eventos de la IU Validar el ingreso de datos Llama mètodos de objs. de “Negocio” Da forma al modelo de negocio Servicios basados en CU Objetos de Negocio Posee las reglas de Negocio Procesa los datos de “Presentaciòn” Llama mètodos de objs. de “Acc. a Datos” Acceder a alguna fuente de datos almacenados  Permitir realizar operaciones CRUD s/datos Mapear datos a objetos de negocio
Capa de Negocio Ventajas: Simplicidad Claridad Reusabilidad Independencia de la infraestructura tecnològica
Arquitectura “No Intrusiva” (agnóstica) para la Capa de Negocio Mantener separada la lògica de negocio de las capas màs dependientes de las tecnologìas informàticas   ( Presentaciòn : WindowsForms, Consolas, Mobile, WebPages –  Acceso a datos : Bases de datos relacionales, BDOO, LINQ, Nhibernate, ActiveRecord, etc)   Jorge Ercoli  (http://metodologiasdesistemas.blogspot.com)
Patrones para la Capa de Negocio Transaction Script Basado en Procesos de Negocio (CU) Implementan la lógica de una determinada acción solicitada por la IU   ( VerificarDisponibilidad, CalcularInterés, ProcesarOrden, BuscarArtsEnPromoción,...) Orientado a aplicaciones simples con Lógica de Negocio de baja complejidad No existen los Objetos de Negocio, se interactúa con las Tablas de la BDR No se oculta el hecho de que existe una BDR que persiste la aplicaciòn Gran cantidad de la lògica de negocio se traslada al motor de BDR (store procedures) Propenso a mezclar lògica de negocio con persistencia (rompe encapsulamiento)
Patrones para la Capa de Negocio (II) Domain Model Basado en una red interconectada de los Objetos de Negocio ( Conferencia, Oyente, Salon, Disertante,...)  Asociaciones entre objetos, manejo de colecciones  Comportamiento encapsulado en el objeto, de acuerdo a sus Responsabilidades Int cant_Inscriptos=conferencia.CuantosInscriptos();  List<Oyente> OyentesInsc=conferencia.DameInscriptos(); If (Conferencia.HayVacantes()); Permite el aislamiento de sus Capas superiores e inferiores, buen encapsulamiento que permite la creaciòn de Componentes. Se debe solucionar el salto (gap) entre el modelo de objetos y la BDR subyacente (“impedance mismatch”)
Patrones para la Capa de Negocio (III) RESUMIENDO: En  TS  no hacemos un diseño OO, simplemente escribimos métodos por c/solicitud de la IU y los encapsulamos en 1 ó + clases.  En  DM  diseñamos una aplicación OO donde podemos aplicar todo tipo de asociaciones entre objetos.
Acceso a datos - Persistencia Como solucionamos el “gap objeto-relacional”? FrameWork ORM (object-relational mapping) Para .NET: NHibernate ActiveRecord (Castle) Linq (sòlo .NET 3) Cooperator (Arg.)
Ventajas de usar un ORM Trabajar con las clases diseñadas en el modelo del dominio No trabajar con filas de tablas (nada de DataRows ó RecordSets ó ResultSets) Código OO limpio, que permite el uso de herencia,  polimorfismo, composiciòn en nuestras clases de negocio Permite crear, modificar, recuperar y borrar objetos persistentes.  Al recuperarlos nos permite navegar por las asociaciones entre objs. y luego actualizarlos al finalizar una transacción.   Permite elegir la BD relacional subyacente con la que querramos interactuar (SqlServer-PostGre-MySql-DB2, Oracle,...) Genera automáticamente el cód. SQL usando una definiciòn del mapeo objeto-relacional (XML mapping); ò el còd. de las clases a partir del ddl de la BDR.
Patrones para persistir objetos Active Record:   Propone tener los métodos que me brindan la persistencia en el mismo objeto de negocio, heredando de una clase Base que posee las operaciones CRUD.  Normalmente las instrucciones del mapeo atributo del objeto-campo de la tabla en la definición del objeto de negocio.  Data Mapper: Propone que nuestros objetos de negocio sean POCO (ó POJO en Java), o sea que no tengan nada de código que los acople a una tecnología dada de persistencia, ya que no es su función manejarla. Normalmente se maneja la persistencia a través de una clase administradora de la misma (Session ò DataContext). Esta clase es la que se encarga de hacer las operaciones CRUD a la BDR.
Active Record
Data Mapper
Data Mapper (II) Como logramos aislar en su propia capa a las funciones del DataMapper, y asi lograr mayor independencia tecnològica? Martin Fowler Patròn DAO (Data Access Object)
DAO - Ejemplo
Ejemplo de ORM: NHibernate  Arquitectura
NHibernate (II) – Proceso de desarrollo 1. Crear la clase que necesita ser persistida  2. Crear la tabla para persistir la clase 3. Crear un archivo de mapeo para que NHibernate sepa como persistir las propiedades de la clase 4. Crear un archivo de configuración para que NHibernate sepa como conectarse a su BD. 5. Usar la API del NHibernate
NH - Pasos 1 y 2 Clases del Dominio (objs. de negocio) Tablas para persistir objetos
NH – Paso 3 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?>  <hibernate-mapping xmlns=&quot;urn:nhibernate-mapping-2.0&quot; default-access=&quot;property&quot;> <class name=&quot;TPVBO.Venta, TPVBO&quot; table=&quot;Venta&quot; > <id name=&quot;VentaID&quot; column=&quot;idVenta&quot; unsaved-value=&quot;0&quot;> <generator class=&quot;identity&quot; />  </id> <property name=&quot;Fecha&quot; type = &quot;DateTime&quot; /> <property name=&quot;Numero&quot; type = &quot;Int32&quot; /> <bag name=&quot;LineaVenta&quot; cascade=&quot;all&quot;> <key column=&quot;venta&quot;/> <one-to-many class=&quot;TPVBO.LineaVenta, TPVBO&quot;/> </bag> </class> </hibernate-mapping> ............... <class name=&quot;TPVBO.LineaVenta, TPVBO&quot; table=&quot;lineaventa&quot; > <id name=&quot;LineaVentaID&quot; column=“idLineaVta&quot; unsaved-value=&quot;0&quot;> <generator class=&quot;identity&quot; />  </id> <property name=&quot;Cantidad&quot; type = &quot;Int32&quot; /> <many-to-one name=“Producto&quot; class=&quot;TPVBO.Producto, TPVBO&quot; column=&quot;producto&quot; /> </class> </hibernate-mapping>
NH – Paso 4 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot;  type=&quot;System.Configuration.NameValueSectionHandler, System,  Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;  /> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot;  value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;  /> <add key=&quot;hibernate.dialect&quot;  value=&quot;NHibernate.Dialect.MySQLDialect&quot;  /> <add key=&quot;hibernate.connection.driver_class&quot;  value=&quot;NHibernate.Driver.MySqlDataDriver&quot;  /> <add key=&quot;hibernate.connection.connection_string&quot;  value=&quot;Server=localhost;Database=TpvHibernate;User ID=jorge;Password=jorge&quot;  /> </nhibernate> </configuration> Generalmente en el  app.config  de la aplicación
NH  - Paso 5, usemos el ORM!! 1.       Agregamos una referencia a NHibernate.dll (para usarlo en nuestra aplicación)  2.       Creamos un objeto de Configuración Configuration cfg = new Configuration(); 3.       Le decimos al Configuration sobre los tipos de objetos que vamos a persistir  cfg.AddAssembly(“TPVBO&quot;);   //  En TPVBO.dll están mis class con mis class.hbm.xml .... 4.       Creamos una Fabrica de sesiones (1 X BD) y luego le pedimos una Session y comenzamos una transacción.  ISessionFactory factory = cfg.BuildSessionFactory(); ISession session = factory.OpenSession(); ITransaction transaction = session.BeginTransaction();   5.       Trabajamos con nuestros objetos  Producto p=new Producto(); p.Codigo=“CA123”;  p.Descripcion=“Camisa CA”;  p.Precio=59.90; session.Save(p);  6.       Grabamos  la transacción en la BD y cerramos la sesión. transaction.Commit(); session.Close();
NH – El objeto Session La Session en NHibernate: Es el punto de contacto principal para trabajar con Nhibernate Nuestros objetos se asocian a ella para poder realizar operaciones de persistencia (Save, Update, Delete, Load ó Get)
NH – Session (II) Con una session abierta     ISession session = factory.OpenSession(); Grabar ó actualizar p.precio = 62.45; session.SaveOrUpdate(p);  //  hará un Insert si el ID=0, sino un Update con el ID corresp. al obj. session.Flush();  //  permite bajar todos los cambios a la BD (sin nec. de tener una transacción) Leer uno o mas objetos Producto p = session.Load( typeof(Producto),m_ID);  //  Busca el objeto Producto con ese m_ID // Usamos el HQL, similar a SQL pero nombrando los atributos de la clase, NO campos de Tabla ! ArrayList misProd = session.Find( “from Producto p where p.Precio > 50”); Borrar session.Delete(p);  //  borramos nuestro objeto p de tipo Producto session.Flush();
NH – Manejo de colecciones //  Creo una Venta   Venta v=new Venta(); v.Fecha=hoy;  v.Numero=22; //  Creo 2 lineas de venta LineaVenta l1=new LineaVenta(); l1.Cantidad=10; l1.Producto=session.Load(typeof(Producto),155); LineaVenta l2=new LineaVenta(); l2.Cantidad=5; l2.Producto=session.Load(typeof(Producto),189); //  agrego a la colección de lineas de venta de v, las 2 lineas creadas v.lineas.Add(l1);  v.lineas.Add(l2); //  grabo la venta a la session con sus 2 lineas (por tener el  cascade=all ): En la BD se inserta una fila en  //  Venta y 2 en LineaVenta   session.Save(v); session.Flush();
NH – manejo de transacciones try {  session = factory.OpenSession(); transaction = session.BeginTransaction(); session.SaveOrUpdate(miObjetoNegocio); transaction.Commit(); } catch (Exception ex) {  transaction.Rollback(); } finally {  session.Close();  }
BREAK  30 minutos
Desarrollemos software en capas ConferenciaWeb Requisitos funcionales: Crear nuevas conferencias Seleccionar el Salón para la Conferencia de una lista. Seleccionar el Disertante que dictará la Conf. de una lista Inscribir Oyentes a las Conferencias disponibles, controlando si  existen vacantes Permitir buscar un Oyente por orden alfabético para inscribirlo Permitir el alta de nuevos Oyentes Mostrar las conferencias que se dictarán próximamente, en el Home  del sitio
ConferenciaWeb – Casos de Uso
ConferenciaWeb – Objetos de Negocio
ConferenciaWeb – Componentes
ConferenciaWeb – Componentes II
ConferenciaWeb Presentación llama Negocio
Negocio llama Acceso a Datos
Veamos la aplicación ejecutarse: ConferenciaWeb Jorge Ercoli  (http://metodologiasdesistemas.blogspot.com)
Nuevo requerimiento Un mismo oyente no puede inscribirse en más de 2 conferencias Donde lo implemento? :  En los Objs. de negocio (Conferencia y Oyente)
Que más deberíamos ver ? Implementación de “Servicios” en la capa de negocio, que permitan interactuar desde otros subsistemas (SOA, “web services”) FrameWorks que me brinden posibilidad de AOP (facilita el desarrollo de servicios horizontales: logging, autorizaciones, transacciones, error check,..),  SPRING.NET   Patrones de diseño :  fábricas de objs., decoradores, estrategias, fachadas, proxys,...
Recursos Libros UML y PATRONES (Prentice Hall - Larman) Programming dot NET components 2nd. Ed. (O´Reilly – Juval Lowy) Head First Design Patterns (O´Reilly – Freeman & Freeman) Applying Domain Driven Design and Patterns, con ejs. en C# y .NET (Jimmy Nilson) Nhibernate in action (Manning – Kuate)
Recursos II (sites) Nhibernate best practices with AspNet ( www.codeproject.com/KB/architecture/ NHibernateBestPractices .aspx  ) ITArchitect  ( www. itarchitect .co.uk  ) Blog de Scott Guthrie , Project Leader .NET   (http://weblogs.asp.net/scottgu/) Mi Blog sobre Arquitecturas y Diseño OO  (orientado a .NET...)  (metodologiasdesistemas.blogspot.com ) Spring.NET   (www.springframework.net ) Jorge Ercoli  (http://metodologiasdesistemas.blogspot.com)

Más contenido relacionado

DOC
Programacion por capas
PPT
Arquitectura 3 Capas
PPTX
Programando en capas
DOCX
Ejemplo arquitectura 3 capas con access
PPTX
Disenando Sistemas empleando el modelo de capas en desarrollo de software
PPT
Arquitectura tres capas
DOCX
PROGRAMACION POR CAPAS-UNT
DOCX
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Programacion por capas
Arquitectura 3 Capas
Programando en capas
Ejemplo arquitectura 3 capas con access
Disenando Sistemas empleando el modelo de capas en desarrollo de software
Arquitectura tres capas
PROGRAMACION POR CAPAS-UNT
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp

La actualidad más candente (20)

PPT
Programación por Capas en PHP
PPT
Arquitectura de sistemas
PPTX
Arquitectura de cliente-servidor de tres capas
PPT
Proyecto multicapa y conexión
PPT
Arquitectura tres capas, NET
 
PPTX
Arquitectura multicapa
PDF
Programación I 2. Arquitectura de Capas
DOC
Arquitectura en capas
PPTX
Arquitectura multicapa
DOCX
1.2 arquitectura en 2 capas
PPTX
cliente servidor de 3 niveles
PPT
Aplicaciones Distribuidas
PDF
03b arquitectura clienteservidor n capas
DOC
3 capas
PPT
A charla12 arq.3-capas
PPTX
Programación de Base de Datos - Unidad II: Aplicaciones con Arquitectura Clie...
PPT
Aplicaciones En Capas
PPTX
Cliente servidor1
PPT
Materia Cliente/Servidor
PPTX
Arquitectura Multinivel
Programación por Capas en PHP
Arquitectura de sistemas
Arquitectura de cliente-servidor de tres capas
Proyecto multicapa y conexión
Arquitectura tres capas, NET
 
Arquitectura multicapa
Programación I 2. Arquitectura de Capas
Arquitectura en capas
Arquitectura multicapa
1.2 arquitectura en 2 capas
cliente servidor de 3 niveles
Aplicaciones Distribuidas
03b arquitectura clienteservidor n capas
3 capas
A charla12 arq.3-capas
Programación de Base de Datos - Unidad II: Aplicaciones con Arquitectura Clie...
Aplicaciones En Capas
Cliente servidor1
Materia Cliente/Servidor
Arquitectura Multinivel
Publicidad

Destacado (20)

PPT
Primera Presentacion De Desarrollo Local
PPTX
Desarrollo psicomotor.
PPTX
Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...
PPT
UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)
PPT
Desarrollo local y regional tendencias
PPS
Desarrollo Local Como Proceso
PPTX
Atencion inmediata del recien nacido
PPTX
Macroangiopatia diabetica
PPT
Nuevos Enfoques Desarrollo Local
PPTX
Arquitectura N-Capas y ADo.NET
PPTX
Arquitectura
DOCX
Guía de observación en el Jardín de niños “Vicente Chicosein”
DOC
Proyecto Desarrollo Local Endogeno Productivo 2010 Final 6 Sept Con Autores
DOCX
Desarrollo cognositivo del niño de 1 a 2 años
PPTX
Arquitectura de software
PPT
Desarrollo Local
PPTX
Desarrollo fisico y psicomotriz
PPT
Desarrollo psicomotriz en la pubertad y adolescencia
PPTX
Desarrollo Motriz en la Adolescencia
PPT
DESARROLLO PSICOMOTRIZ EN LA VEJEZ
Primera Presentacion De Desarrollo Local
Desarrollo psicomotor.
Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...
UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)
Desarrollo local y regional tendencias
Desarrollo Local Como Proceso
Atencion inmediata del recien nacido
Macroangiopatia diabetica
Nuevos Enfoques Desarrollo Local
Arquitectura N-Capas y ADo.NET
Arquitectura
Guía de observación en el Jardín de niños “Vicente Chicosein”
Proyecto Desarrollo Local Endogeno Productivo 2010 Final 6 Sept Con Autores
Desarrollo cognositivo del niño de 1 a 2 años
Arquitectura de software
Desarrollo Local
Desarrollo fisico y psicomotriz
Desarrollo psicomotriz en la pubertad y adolescencia
Desarrollo Motriz en la Adolescencia
DESARROLLO PSICOMOTRIZ EN LA VEJEZ
Publicidad

Similar a Desarrollo en Capas con .Net (20)

PPTX
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
PPT
Persistencia de un modelo de objetos
PPT
Kumbia PHP Framework - Inicios, Presente y Futuro
PPTX
Efc programación .net-luis fernando aguas - 22012022 1700
PDF
How To Split The Monolith - From monolith to microservices
PPT
1127082.ppt
PPTX
CvTrafficCounter Video
PPT
PDF
SQLSaturday 346 El Salvador 2015 Cubes Performance
PPTX
MODELO DE DISEÑOOOOOOOOOOOOOOOOOOOOO.pptx
PPTX
PPTX
Comunidad emagister 63082_63082-convertido
PDF
Sgbd roberto escriche marcelo hualoto
PPT
Postgresql expo
PPT
Sistemas distribuidos2
PPTX
Servicios de datos en la nube
PPTX
Ingenieria sistemas
PPTX
Programación en capass
PPTX
5-Unidad 2: Diseño de Vista-2.2 Para Web
PPSX
Enterprise manager 11g
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
Persistencia de un modelo de objetos
Kumbia PHP Framework - Inicios, Presente y Futuro
Efc programación .net-luis fernando aguas - 22012022 1700
How To Split The Monolith - From monolith to microservices
1127082.ppt
CvTrafficCounter Video
SQLSaturday 346 El Salvador 2015 Cubes Performance
MODELO DE DISEÑOOOOOOOOOOOOOOOOOOOOO.pptx
Comunidad emagister 63082_63082-convertido
Sgbd roberto escriche marcelo hualoto
Postgresql expo
Sistemas distribuidos2
Servicios de datos en la nube
Ingenieria sistemas
Programación en capass
5-Unidad 2: Diseño de Vista-2.2 Para Web
Enterprise manager 11g

Último (20)

PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
Influencia-del-uso-de-redes-sociales.pdf
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
Sesion 1 de microsoft power point - Clase 1
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPT
introduccion a las_web en el 2025_mejoras.ppt
PDF
clase auditoria informatica 2025.........
PDF
Maste clas de estructura metálica y arquitectura
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
Presentacion de Alba Curso Auditores Internos ISO 19011
informe_fichas1y2_corregido.docx (2) (1).pdf
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
El-Gobierno-Electrónico-En-El-Estado-Bolivia
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
Influencia-del-uso-de-redes-sociales.pdf
Zarate Quispe Alex aldayir aplicaciones de internet .docx
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Sesion 1 de microsoft power point - Clase 1
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
historia_web de la creacion de un navegador_presentacion.pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
introduccion a las_web en el 2025_mejoras.ppt
clase auditoria informatica 2025.........
Maste clas de estructura metálica y arquitectura
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx

Desarrollo en Capas con .Net

  • 1. Desarrollo en Capas con “mejorando la productividad y reutilizaciòn” Disertante: Jorge Ercoli (Analista de Sistemas) Jornadas sobre Desarrollo de Software UTN Centro de Estudios Mar del Plata - Argentina
  • 2. Temario Componentes de software La Lògica del Negocio Arquitectura sin capa de negocio Arquitectura de 3 Capas lògicas. Responsabilidad de los componentes de cada capa. Capa de Negocio. Ventajas. Patrones: Transaction Script y Domain Model Capa de Acceso a Datos. Persistencia de objetos de negocio. ORMs, ventajas, patrones: ActiveRecord y DataMapper NHibernate: arquitectura, proceso de desarrollo, uso. BREAK (30 minutos) Desarrollo de software aplicando 3 capas, “ConferenciaWeb” sitio de ejemplo usando AspNet 2, C# y Nhibernate Comprendiendo el còdigo de cada componente: Presentaciòn (Asp Net pages) Procesos de Negocio (Clases controladoras de CU) Objetos de Negocio (Clases que representan las Entidades) Acceso a Datos (DAOs de los objetos de Negocio)
  • 3. “ Toda la arquitectura es diseño, pero no todo el diseño es arquitectura. La arquitectura representa las decisiones de diseño significativas que le dan forma a un sistema, donde lo significativo puede ser medido por el costo del cambio .” Grady Booch
  • 4. Componentes de Software Componentes ?? “ E s una pieza de software que realiza una función bien definida, y posee una interfaz bien definida” “ Bloques de construcciòn fìsicos del sistema” * En .NET son los “assemblies” (ensamblados), los cuales pueden ser exe ò dll.
  • 5. Beneficios de trabajar con componentes La división en componentes reduce la complejidad , permite la reutilización y acelera el proceso de ensamblaje de software. (plug-in) Los creadores de componentes pueden especializarse creando objetos cada vez mas complejos y de mayor calidad . La interoperabilidad entre componentes de distintos fabricantes aumenta la competencia , reduce los costos y facilita la construcción de estandares Los costos de mantenimiento del software se reducen.
  • 6. Lògica de Negocio “ Procesos y reglas del dominio del negocio, obtenidos en la fase de Análisis del Sistema” Ejemplo para sistema de Gestión de Conferencias “ Inscripciòn de un Oyente a una Conferencia” “ No inscribir nuevos oyentes si se excediò la capacidad del Salon” “ Consultar las Conferencias que poseen vacantes” “ Registrar altas de nuevos Oyentes” “ Permitir el cambio de Salòn de una Conferencia sòlo cuando la cantidad de inscriptos no supere su capacidad”
  • 7. Arquitectura sin Capa de Negocio Presentaciòn Acceso a Datos InscribirClick( ) { conf_Id=ComboConferencia.SelectedValue; oye_Id=LabelOyenteId; dtOyeInsc= sqlExec(“sele * from conf_oye where…”); if (dtOyeInsc.Count()=0) // Oyente inscripto?? Inscriptos=sqlExec(“sele count(*) from conf_oye…”); dtSalon= sqlExec(“sele * from Salon where Id=…”); if (dtSalon(0).Capacidad – Inscriptos > 0) sqlExec(“Insert into conf_oye … values …”); else Mostrar(“No Hay Vacantes !!”); else Mostrar(“Oyente ya inscripto !!”); }
  • 8. Arquitectura con Capa de Negocio InscribirClick( ) { conf_Id=ComboConferencia.SelectedValue; oye_Id=LabelOyenteId; ProcesoInscrip i=new ProcesoInscrip(); try { i.Inscribir (conf_Id, oye_Id); } catch (Excepcion ex) } Negocio Presentaciòn Acceso a Datos
  • 9. Veamos la aplicación sin capa de negocio: ConferenciaWeb 2 capas ( DataSets Tipados ) Jorge Ercoli (http://metodologiasdesistemas.blogspot.com)
  • 10. 3 Capas Lògicas Presentaciòn Negocio Acceso a Datos BD Permitir el ingreso de datos del Usuario Mostrar informaciòn en la IU Capturar eventos de la IU Validar el ingreso de datos Llama mètodos de objs. de “Negocio” Da forma al modelo de negocio Servicios basados en CU Objetos de Negocio Posee las reglas de Negocio Procesa los datos de “Presentaciòn” Llama mètodos de objs. de “Acc. a Datos” Acceder a alguna fuente de datos almacenados Permitir realizar operaciones CRUD s/datos Mapear datos a objetos de negocio
  • 11. Capa de Negocio Ventajas: Simplicidad Claridad Reusabilidad Independencia de la infraestructura tecnològica
  • 12. Arquitectura “No Intrusiva” (agnóstica) para la Capa de Negocio Mantener separada la lògica de negocio de las capas màs dependientes de las tecnologìas informàticas ( Presentaciòn : WindowsForms, Consolas, Mobile, WebPages – Acceso a datos : Bases de datos relacionales, BDOO, LINQ, Nhibernate, ActiveRecord, etc) Jorge Ercoli (http://metodologiasdesistemas.blogspot.com)
  • 13. Patrones para la Capa de Negocio Transaction Script Basado en Procesos de Negocio (CU) Implementan la lógica de una determinada acción solicitada por la IU ( VerificarDisponibilidad, CalcularInterés, ProcesarOrden, BuscarArtsEnPromoción,...) Orientado a aplicaciones simples con Lógica de Negocio de baja complejidad No existen los Objetos de Negocio, se interactúa con las Tablas de la BDR No se oculta el hecho de que existe una BDR que persiste la aplicaciòn Gran cantidad de la lògica de negocio se traslada al motor de BDR (store procedures) Propenso a mezclar lògica de negocio con persistencia (rompe encapsulamiento)
  • 14. Patrones para la Capa de Negocio (II) Domain Model Basado en una red interconectada de los Objetos de Negocio ( Conferencia, Oyente, Salon, Disertante,...) Asociaciones entre objetos, manejo de colecciones Comportamiento encapsulado en el objeto, de acuerdo a sus Responsabilidades Int cant_Inscriptos=conferencia.CuantosInscriptos(); List<Oyente> OyentesInsc=conferencia.DameInscriptos(); If (Conferencia.HayVacantes()); Permite el aislamiento de sus Capas superiores e inferiores, buen encapsulamiento que permite la creaciòn de Componentes. Se debe solucionar el salto (gap) entre el modelo de objetos y la BDR subyacente (“impedance mismatch”)
  • 15. Patrones para la Capa de Negocio (III) RESUMIENDO: En TS no hacemos un diseño OO, simplemente escribimos métodos por c/solicitud de la IU y los encapsulamos en 1 ó + clases. En DM diseñamos una aplicación OO donde podemos aplicar todo tipo de asociaciones entre objetos.
  • 16. Acceso a datos - Persistencia Como solucionamos el “gap objeto-relacional”? FrameWork ORM (object-relational mapping) Para .NET: NHibernate ActiveRecord (Castle) Linq (sòlo .NET 3) Cooperator (Arg.)
  • 17. Ventajas de usar un ORM Trabajar con las clases diseñadas en el modelo del dominio No trabajar con filas de tablas (nada de DataRows ó RecordSets ó ResultSets) Código OO limpio, que permite el uso de herencia, polimorfismo, composiciòn en nuestras clases de negocio Permite crear, modificar, recuperar y borrar objetos persistentes. Al recuperarlos nos permite navegar por las asociaciones entre objs. y luego actualizarlos al finalizar una transacción. Permite elegir la BD relacional subyacente con la que querramos interactuar (SqlServer-PostGre-MySql-DB2, Oracle,...) Genera automáticamente el cód. SQL usando una definiciòn del mapeo objeto-relacional (XML mapping); ò el còd. de las clases a partir del ddl de la BDR.
  • 18. Patrones para persistir objetos Active Record: Propone tener los métodos que me brindan la persistencia en el mismo objeto de negocio, heredando de una clase Base que posee las operaciones CRUD. Normalmente las instrucciones del mapeo atributo del objeto-campo de la tabla en la definición del objeto de negocio. Data Mapper: Propone que nuestros objetos de negocio sean POCO (ó POJO en Java), o sea que no tengan nada de código que los acople a una tecnología dada de persistencia, ya que no es su función manejarla. Normalmente se maneja la persistencia a través de una clase administradora de la misma (Session ò DataContext). Esta clase es la que se encarga de hacer las operaciones CRUD a la BDR.
  • 21. Data Mapper (II) Como logramos aislar en su propia capa a las funciones del DataMapper, y asi lograr mayor independencia tecnològica? Martin Fowler Patròn DAO (Data Access Object)
  • 23. Ejemplo de ORM: NHibernate Arquitectura
  • 24. NHibernate (II) – Proceso de desarrollo 1. Crear la clase que necesita ser persistida 2. Crear la tabla para persistir la clase 3. Crear un archivo de mapeo para que NHibernate sepa como persistir las propiedades de la clase 4. Crear un archivo de configuración para que NHibernate sepa como conectarse a su BD. 5. Usar la API del NHibernate
  • 25. NH - Pasos 1 y 2 Clases del Dominio (objs. de negocio) Tablas para persistir objetos
  • 26. NH – Paso 3 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <hibernate-mapping xmlns=&quot;urn:nhibernate-mapping-2.0&quot; default-access=&quot;property&quot;> <class name=&quot;TPVBO.Venta, TPVBO&quot; table=&quot;Venta&quot; > <id name=&quot;VentaID&quot; column=&quot;idVenta&quot; unsaved-value=&quot;0&quot;> <generator class=&quot;identity&quot; /> </id> <property name=&quot;Fecha&quot; type = &quot;DateTime&quot; /> <property name=&quot;Numero&quot; type = &quot;Int32&quot; /> <bag name=&quot;LineaVenta&quot; cascade=&quot;all&quot;> <key column=&quot;venta&quot;/> <one-to-many class=&quot;TPVBO.LineaVenta, TPVBO&quot;/> </bag> </class> </hibernate-mapping> ............... <class name=&quot;TPVBO.LineaVenta, TPVBO&quot; table=&quot;lineaventa&quot; > <id name=&quot;LineaVentaID&quot; column=“idLineaVta&quot; unsaved-value=&quot;0&quot;> <generator class=&quot;identity&quot; /> </id> <property name=&quot;Cantidad&quot; type = &quot;Int32&quot; /> <many-to-one name=“Producto&quot; class=&quot;TPVBO.Producto, TPVBO&quot; column=&quot;producto&quot; /> </class> </hibernate-mapping>
  • 27. NH – Paso 4 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot; type=&quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot; /> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot; value=&quot;NHibernate.Connection.DriverConnectionProvider&quot; /> <add key=&quot;hibernate.dialect&quot; value=&quot;NHibernate.Dialect.MySQLDialect&quot; /> <add key=&quot;hibernate.connection.driver_class&quot; value=&quot;NHibernate.Driver.MySqlDataDriver&quot; /> <add key=&quot;hibernate.connection.connection_string&quot; value=&quot;Server=localhost;Database=TpvHibernate;User ID=jorge;Password=jorge&quot; /> </nhibernate> </configuration> Generalmente en el app.config de la aplicación
  • 28. NH - Paso 5, usemos el ORM!! 1.      Agregamos una referencia a NHibernate.dll (para usarlo en nuestra aplicación) 2.       Creamos un objeto de Configuración Configuration cfg = new Configuration(); 3.       Le decimos al Configuration sobre los tipos de objetos que vamos a persistir cfg.AddAssembly(“TPVBO&quot;); // En TPVBO.dll están mis class con mis class.hbm.xml .... 4.       Creamos una Fabrica de sesiones (1 X BD) y luego le pedimos una Session y comenzamos una transacción. ISessionFactory factory = cfg.BuildSessionFactory(); ISession session = factory.OpenSession(); ITransaction transaction = session.BeginTransaction(); 5.       Trabajamos con nuestros objetos Producto p=new Producto(); p.Codigo=“CA123”; p.Descripcion=“Camisa CA”; p.Precio=59.90; session.Save(p); 6.       Grabamos la transacción en la BD y cerramos la sesión. transaction.Commit(); session.Close();
  • 29. NH – El objeto Session La Session en NHibernate: Es el punto de contacto principal para trabajar con Nhibernate Nuestros objetos se asocian a ella para poder realizar operaciones de persistencia (Save, Update, Delete, Load ó Get)
  • 30. NH – Session (II) Con una session abierta  ISession session = factory.OpenSession(); Grabar ó actualizar p.precio = 62.45; session.SaveOrUpdate(p); // hará un Insert si el ID=0, sino un Update con el ID corresp. al obj. session.Flush(); // permite bajar todos los cambios a la BD (sin nec. de tener una transacción) Leer uno o mas objetos Producto p = session.Load( typeof(Producto),m_ID); // Busca el objeto Producto con ese m_ID // Usamos el HQL, similar a SQL pero nombrando los atributos de la clase, NO campos de Tabla ! ArrayList misProd = session.Find( “from Producto p where p.Precio > 50”); Borrar session.Delete(p); // borramos nuestro objeto p de tipo Producto session.Flush();
  • 31. NH – Manejo de colecciones // Creo una Venta Venta v=new Venta(); v.Fecha=hoy; v.Numero=22; // Creo 2 lineas de venta LineaVenta l1=new LineaVenta(); l1.Cantidad=10; l1.Producto=session.Load(typeof(Producto),155); LineaVenta l2=new LineaVenta(); l2.Cantidad=5; l2.Producto=session.Load(typeof(Producto),189); // agrego a la colección de lineas de venta de v, las 2 lineas creadas v.lineas.Add(l1); v.lineas.Add(l2); // grabo la venta a la session con sus 2 lineas (por tener el cascade=all ): En la BD se inserta una fila en // Venta y 2 en LineaVenta session.Save(v); session.Flush();
  • 32. NH – manejo de transacciones try { session = factory.OpenSession(); transaction = session.BeginTransaction(); session.SaveOrUpdate(miObjetoNegocio); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); } finally { session.Close(); }
  • 33. BREAK 30 minutos
  • 34. Desarrollemos software en capas ConferenciaWeb Requisitos funcionales: Crear nuevas conferencias Seleccionar el Salón para la Conferencia de una lista. Seleccionar el Disertante que dictará la Conf. de una lista Inscribir Oyentes a las Conferencias disponibles, controlando si existen vacantes Permitir buscar un Oyente por orden alfabético para inscribirlo Permitir el alta de nuevos Oyentes Mostrar las conferencias que se dictarán próximamente, en el Home del sitio
  • 41. Veamos la aplicación ejecutarse: ConferenciaWeb Jorge Ercoli (http://metodologiasdesistemas.blogspot.com)
  • 42. Nuevo requerimiento Un mismo oyente no puede inscribirse en más de 2 conferencias Donde lo implemento? : En los Objs. de negocio (Conferencia y Oyente)
  • 43. Que más deberíamos ver ? Implementación de “Servicios” en la capa de negocio, que permitan interactuar desde otros subsistemas (SOA, “web services”) FrameWorks que me brinden posibilidad de AOP (facilita el desarrollo de servicios horizontales: logging, autorizaciones, transacciones, error check,..), SPRING.NET Patrones de diseño : fábricas de objs., decoradores, estrategias, fachadas, proxys,...
  • 44. Recursos Libros UML y PATRONES (Prentice Hall - Larman) Programming dot NET components 2nd. Ed. (O´Reilly – Juval Lowy) Head First Design Patterns (O´Reilly – Freeman & Freeman) Applying Domain Driven Design and Patterns, con ejs. en C# y .NET (Jimmy Nilson) Nhibernate in action (Manning – Kuate)
  • 45. Recursos II (sites) Nhibernate best practices with AspNet ( www.codeproject.com/KB/architecture/ NHibernateBestPractices .aspx ) ITArchitect ( www. itarchitect .co.uk ) Blog de Scott Guthrie , Project Leader .NET (http://weblogs.asp.net/scottgu/) Mi Blog sobre Arquitecturas y Diseño OO (orientado a .NET...) (metodologiasdesistemas.blogspot.com ) Spring.NET (www.springframework.net ) Jorge Ercoli (http://metodologiasdesistemas.blogspot.com)