SlideShare une entreprise Scribd logo
1  sur  45
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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
Componentes de Software  ,[object Object],[object Object],[object Object],* En .NET son los “assemblies” (ensamblados), los cuales pueden ser exe ò dll.
Beneficios de trabajar con componentes ,[object Object],[object Object],[object Object],[object Object]
Lògica de Negocio ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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
[object Object],ConferenciaWeb  2 capas ( DataSets Tipados ) Jorge Ercoli  (http://metodologiasdesistemas.blogspot.com)
3 Capas Lògicas Presentaciòn Negocio Acceso a Datos BD ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Capa de Negocio ,[object Object],[object Object],[object Object],[object Object],[object Object]
Arquitectura “No Intrusiva” (agnóstica) para la Capa de Negocio ,[object Object],Jorge Ercoli  (http://metodologiasdesistemas.blogspot.com)
Patrones para la Capa de Negocio ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Patrones para la Capa de Negocio (II) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Patrones para la Capa de Negocio (III) ,[object Object],[object Object],[object Object]
Acceso a datos - Persistencia ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ventajas de usar un ORM ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Patrones para persistir objetos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Active Record
Data Mapper
Data Mapper (II) ,[object Object],Martin Fowler Patròn DAO (Data Access Object)
DAO - Ejemplo
Ejemplo de ORM: NHibernate  Arquitectura
NHibernate (II) – Proceso de desarrollo ,[object Object],[object Object],[object Object],[object Object],[object Object]
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 ,[object Object],[object Object],[object Object]
NH – Session (II) Con una session abierta     ISession session = factory.OpenSession(); ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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: ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ConferenciaWeb – Casos de Uso
ConferenciaWeb – Objetos de Negocio
ConferenciaWeb – Componentes
ConferenciaWeb – Componentes II
ConferenciaWeb Presentación llama Negocio
Negocio llama Acceso a Datos
[object Object],ConferenciaWeb Jorge Ercoli  (http://metodologiasdesistemas.blogspot.com)
Nuevo requerimiento ,[object Object],[object Object],[object Object]
Que más deberíamos ver ? ,[object Object],[object Object],[object Object]
Recursos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Recursos II (sites) ,[object Object],[object Object],[object Object],[object Object],[object Object],Jorge Ercoli  (http://metodologiasdesistemas.blogspot.com)

Contenu connexe

Tendances

Arquitectura de cliente-servidor de tres capas
Arquitectura de cliente-servidor de tres capasArquitectura de cliente-servidor de tres capas
Arquitectura de cliente-servidor de tres capas
anibalsmit
 
Arquitectura multicapa
Arquitectura multicapaArquitectura multicapa
Arquitectura multicapa
Hugo Herrera
 
A charla12 arq.3-capas
A charla12 arq.3-capasA charla12 arq.3-capas
A charla12 arq.3-capas
home
 
Cliente servidor1
Cliente servidor1Cliente servidor1
Cliente servidor1
Sara Amores
 

Tendances (20)

Programación por Capas en PHP
Programación por Capas en PHPProgramación por Capas en PHP
Programación por Capas en PHP
 
Arquitectura de sistemas
Arquitectura de sistemasArquitectura de sistemas
Arquitectura de sistemas
 
Arquitectura de cliente-servidor de tres capas
Arquitectura de cliente-servidor de tres capasArquitectura de cliente-servidor de tres capas
Arquitectura de cliente-servidor de tres capas
 
Proyecto multicapa y conexión
Proyecto multicapa y conexiónProyecto multicapa y conexión
Proyecto multicapa y conexión
 
Arquitectura tres capas, NET
Arquitectura tres capas, NETArquitectura tres capas, NET
Arquitectura tres capas, NET
 
Arquitectura multicapa
Arquitectura multicapaArquitectura multicapa
Arquitectura multicapa
 
Programación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de CapasProgramación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de Capas
 
Arquitectura en capas
Arquitectura en capasArquitectura en capas
Arquitectura en capas
 
Arquitectura multicapa
Arquitectura multicapaArquitectura multicapa
Arquitectura multicapa
 
1.2 arquitectura en 2 capas
1.2 arquitectura en 2 capas1.2 arquitectura en 2 capas
1.2 arquitectura en 2 capas
 
cliente servidor de 3 niveles
cliente servidor de 3 nivelescliente servidor de 3 niveles
cliente servidor de 3 niveles
 
Aplicaciones Distribuidas
Aplicaciones DistribuidasAplicaciones Distribuidas
Aplicaciones Distribuidas
 
03b arquitectura clienteservidor n capas
03b arquitectura clienteservidor n capas03b arquitectura clienteservidor n capas
03b arquitectura clienteservidor n capas
 
3 capas
3 capas3 capas
3 capas
 
A charla12 arq.3-capas
A charla12 arq.3-capasA charla12 arq.3-capas
A charla12 arq.3-capas
 
Programación de Base de Datos - Unidad II: Aplicaciones con Arquitectura Clie...
Programación de Base de Datos - Unidad II: Aplicaciones con Arquitectura Clie...Programación de Base de Datos - Unidad II: Aplicaciones con Arquitectura Clie...
Programación de Base de Datos - Unidad II: Aplicaciones con Arquitectura Clie...
 
Aplicaciones En Capas
Aplicaciones En CapasAplicaciones En Capas
Aplicaciones En Capas
 
Cliente servidor1
Cliente servidor1Cliente servidor1
Cliente servidor1
 
Materia Cliente/Servidor
Materia Cliente/ServidorMateria Cliente/Servidor
Materia Cliente/Servidor
 
Arquitectura Multinivel
Arquitectura MultinivelArquitectura Multinivel
Arquitectura Multinivel
 

En vedette

Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...
Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...
Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...
Alien
 
UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)
UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)
UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)
Videoconferencias UTPL
 
Atencion inmediata del recien nacido
Atencion inmediata del recien nacidoAtencion inmediata del recien nacido
Atencion inmediata del recien nacido
Laura Olivos Peramas
 
Desarrollo cognositivo del niño de 1 a 2 años
Desarrollo cognositivo del niño de 1 a 2 añosDesarrollo cognositivo del niño de 1 a 2 años
Desarrollo cognositivo del niño de 1 a 2 años
Berenice Rojas
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
Liliana Pacheco
 
Desarrollo fisico y psicomotriz
Desarrollo fisico y psicomotrizDesarrollo fisico y psicomotriz
Desarrollo fisico y psicomotriz
Asahel Arroyo
 

En vedette (20)

Primera Presentacion De Desarrollo Local
Primera Presentacion De Desarrollo LocalPrimera Presentacion De Desarrollo Local
Primera Presentacion De Desarrollo Local
 
Desarrollo psicomotor.
Desarrollo psicomotor.Desarrollo psicomotor.
Desarrollo psicomotor.
 
Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...
Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...Evaluación del desarrollo psicomotor: Test Peruano del Desarrollo del Niño (0...
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)
UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)
UTPL-MÓDULO I DESARROLLO LOCAL Y SALUD-I-BIMESTRE-(NOVIEMBRE 2011-MAYO 2012)
 
Desarrollo local y regional tendencias
Desarrollo local y regional tendenciasDesarrollo local y regional tendencias
Desarrollo local y regional tendencias
 
Desarrollo Local Como Proceso
Desarrollo Local Como ProcesoDesarrollo Local Como Proceso
Desarrollo Local Como Proceso
 
Atencion inmediata del recien nacido
Atencion inmediata del recien nacidoAtencion inmediata del recien nacido
Atencion inmediata del recien nacido
 
Macroangiopatia diabetica
Macroangiopatia diabeticaMacroangiopatia diabetica
Macroangiopatia diabetica
 
Nuevos Enfoques Desarrollo Local
Nuevos Enfoques Desarrollo  LocalNuevos Enfoques Desarrollo  Local
Nuevos Enfoques Desarrollo Local
 
Arquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NETArquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NET
 
Arquitectura
ArquitecturaArquitectura
Arquitectura
 
Guía de observación en el Jardín de niños “Vicente Chicosein”
Guía de observación en el Jardín de niños “Vicente Chicosein”Guía de observación en el Jardín de niños “Vicente Chicosein”
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
Proyecto Desarrollo Local Endogeno Productivo 2010 Final 6 Sept Con AutoresProyecto Desarrollo Local Endogeno Productivo 2010 Final 6 Sept Con Autores
Proyecto Desarrollo Local Endogeno Productivo 2010 Final 6 Sept Con Autores
 
Desarrollo cognositivo del niño de 1 a 2 años
Desarrollo cognositivo del niño de 1 a 2 añosDesarrollo cognositivo del niño de 1 a 2 años
Desarrollo cognositivo del niño de 1 a 2 años
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
 
Desarrollo Local
Desarrollo LocalDesarrollo Local
Desarrollo Local
 
Desarrollo fisico y psicomotriz
Desarrollo fisico y psicomotrizDesarrollo fisico y psicomotriz
Desarrollo fisico y psicomotriz
 
Desarrollo psicomotriz en la pubertad y adolescencia
Desarrollo psicomotriz en la pubertad y adolescenciaDesarrollo psicomotriz en la pubertad y adolescencia
Desarrollo psicomotriz en la pubertad y adolescencia
 
Desarrollo Motriz en la Adolescencia
Desarrollo Motriz en la AdolescenciaDesarrollo Motriz en la Adolescencia
Desarrollo Motriz en la Adolescencia
 
DESARROLLO PSICOMOTRIZ EN LA VEJEZ
DESARROLLO PSICOMOTRIZ EN LA VEJEZDESARROLLO PSICOMOTRIZ EN LA VEJEZ
DESARROLLO PSICOMOTRIZ EN LA VEJEZ
 

Similaire à Desarrollo en Capas con .Net

Kumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoKumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y Futuro
Deivinson Tejeda
 
Sgbd roberto escriche marcelo hualoto
Sgbd roberto escriche marcelo hualotoSgbd roberto escriche marcelo hualoto
Sgbd roberto escriche marcelo hualoto
Kenny24
 
Sistemas distribuidos2
Sistemas distribuidos2Sistemas distribuidos2
Sistemas distribuidos2
Holger Sanchez
 
Servicios de datos en la nube
Servicios de datos en la nubeServicios de datos en la nube
Servicios de datos en la nube
Juan Pablo
 
Enterprise manager 11g
Enterprise manager  11gEnterprise manager  11g
Enterprise manager 11g
Eddy Solano
 

Similaire à Desarrollo en Capas con .Net (20)

EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
 
Persistencia de un modelo de objetos
Persistencia de un modelo de objetosPersistencia de un modelo de objetos
Persistencia de un modelo de objetos
 
Kumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y FuturoKumbia PHP Framework - Inicios, Presente y Futuro
Kumbia PHP Framework - Inicios, Presente y Futuro
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 
How To Split The Monolith - From monolith to microservices
How To Split The Monolith - From monolith to microservicesHow To Split The Monolith - From monolith to microservices
How To Split The Monolith - From monolith to microservices
 
1127082.ppt
1127082.ppt1127082.ppt
1127082.ppt
 
CvTrafficCounter Video
CvTrafficCounter VideoCvTrafficCounter Video
CvTrafficCounter Video
 
Cliente/Servidor
Cliente/ServidorCliente/Servidor
Cliente/Servidor
 
SQLSaturday 346 El Salvador 2015 Cubes Performance
SQLSaturday 346 El Salvador 2015 Cubes PerformanceSQLSaturday 346 El Salvador 2015 Cubes Performance
SQLSaturday 346 El Salvador 2015 Cubes Performance
 
S4-PD1-2.2 EF
S4-PD1-2.2 EFS4-PD1-2.2 EF
S4-PD1-2.2 EF
 
Comunidad emagister 63082_63082-convertido
Comunidad emagister 63082_63082-convertidoComunidad emagister 63082_63082-convertido
Comunidad emagister 63082_63082-convertido
 
Sgbd roberto escriche marcelo hualoto
Sgbd roberto escriche marcelo hualotoSgbd roberto escriche marcelo hualoto
Sgbd roberto escriche marcelo hualoto
 
Postgresql expo
Postgresql expoPostgresql expo
Postgresql expo
 
Sistemas distribuidos2
Sistemas distribuidos2Sistemas distribuidos2
Sistemas distribuidos2
 
Servicios de datos en la nube
Servicios de datos en la nubeServicios de datos en la nube
Servicios de datos en la nube
 
Ingenieria sistemas
Ingenieria sistemasIngenieria sistemas
Ingenieria sistemas
 
Programación en capass
Programación en capassProgramación en capass
Programación en capass
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
 
Enterprise manager 11g
Enterprise manager  11gEnterprise manager  11g
Enterprise manager 11g
 
Cubos ppt
Cubos pptCubos ppt
Cubos ppt
 

Dernier

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (11)

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.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.
  • 3.
  • 4.
  • 5.
  • 6.
  • 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.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 21.
  • 23. Ejemplo de ORM: NHibernate Arquitectura
  • 24.
  • 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.
  • 30.
  • 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.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.