domingo, 11 de mayo de 2008

Desarrollando Software con un Modelo de Negocio

Aquí les dejo la presentación que dicté en la UTN Mar del Plata, en el marco de las "Jornadas sobre Desarrollo Software" (Mayo/08).
La temática gira alrededor de los siguientes conceptos: Componentes software, Modelo de negocio (Trans.Script y Domain Model) , Persistencia de objetos de neg. y acceso a datos con NHib. (DataMapper y ActiveRecord), DAO.

Cualquier problema con la visualización de la presentación pulsar en opción "View" de Slideshare.

La aplicación Web que demuestra estas tecnologías ( desarrollada con AspNet 2 y NHib.), se encuentra aquí : ConferenciaWeb.
Dentro del zip tienen una carpeta con las instrucciones para instalar y ejecutar; tener en cuenta que necesitan el VS 2005 y en lo posible SqlServer 2005, si necesitan probar con otra BD deben cambiar los drivers del NHibernate en el web.Config. Espero les sea de utilidad.

Por ultimo les dejo el enlace a la filmaciòn del seminario que realizò la gente de TecnoTV de Canal 10 de MdP : seminario de capas con NET

5 comentarios:

Adrian Garcia dijo...

Hola

Muy buena informacion.

Lamentablemente algunos links no estan activos.

Tienes la posibilidad de enviarme la informacion sobre NHibernate o algun ejemplo de esto a mi correo, claro sino fuera mucha la molestia o dime de donde puedo descargalos.

Tu tema de 3 capas es interesante, estoy tratando de aprender sobre NHibernate, ya he utilizado anteriomente MyGeneration con Doodads.

Saludos,

Adrian Garcia
Guatemala, C.A.

Jorge Ercoli dijo...

Adrian, gracias por tu comentario. Acabo de probar todos los links que tienen que ver con NHibernate y estaban todos bien, te agradecería me comentes que "links" no te han funcionado.
El ejemplo más claro de 3 capas lo tienes bajando el código de la aplicación "ConferenciaWeb" en el post del 11 de mayo.
saludos, Jorge.

Unknown dijo...

Hola Jorge,
no tengo mucha fé de que me contestes porque es un post antiguo (pero muy interesante!!)
Pero de todas maneras, intentaré exponer mi duda:

Estoy cursando la materia de práctica profesional donde, usando la metodología de UP, tenemos que analizar una necesidad de un cliente y elaborar todos los artefactos de las disciplinas.

Vamos a hacer un sistema de reclutamiento y seleccion de postulantes de recursos humanos.
Llegamos a un punto donde estamos trabados con la arquitectura. Admito que ninguno en mi grupo tiene experiencia en arquitectura y tampoco vimos esos temas en materias anteriores asi que lo único que nos queda es investigar.

De todo lo que leímos, habíamos propuesto usar hibernate para la persistencia de los datos pero el profesor que nos tocó (en su rol de consultor) dijo que al usar Hibernate no ibamos a poder implementar el comportamiento de los objetos de negocio como veniamos haciendo en lo visto en materias anteriores ...

Por lo que intentamos buscar en internet, no pudimos encontrar ningun ejemplo de Hibernate donde se muestre un híbrido entre los metodos para persistir la informacion y métodos de comportamiento del objeto.
Por ejemplo, en nuestro caso tenemos que generar reportes de índices de rotacion los cuales los generamos a partir de distintas tablas y a dichos valores se le aplican formulas matematicas.
Nosotros estimamos que necesitariamos una clase reporte que obtendría información de diferentes tablas usando rangos de fechas y otros parametros para filtrar informacion y poder procesarla pero por lo que vimos hasta ahora, cuando se usa hibernate se debe mapear absolutamente todas las clases de la capa de negocios?
En este caso, tendríamos que mapear el objeto reporte también, el cual no tiene persistencia y es solo para procesar informacion?

Otro ejemplo que nos planteamos donde necesitamos utilizar lógica en un metodo:
Si tengo que un empleado se desvinculó de la empresa y la desvinculacion es por RENUNCIA, debe generarle una entrevista de egreso pero si se desvincula porque lo echaron, no debe generarla.
De nuevo, por lo que entiendo del mapeo entre objetos de negocio y tabla, no podría tener el método "desvincularEmpleado(motivo, fecha de egreso)" porque ese comportamiento puede generar una entrevista de egreso o no, dependiendo de si renunció o si lo echaron.
Es esto correcto? El profesor solo se limitó a decirnos que era una "chanchada" si quisiesemos tener un objeto de negocio que usa al objeto de persistencia.

Habiendo dicho tooooodo esto, se te ocurre algo que nos puedas sugerir para esta situacion o deberíamos desistir de ORM y usar DAO sin ORM?

Desde ya, muchas gracias y felicitaciones por el excelente blog!

Juan Pablo
por las dudas, mi mail es jpcarro@gmail.com

Jorge Ercoli dijo...

Juan Pablo, recien leo tu post (recibo mucha basura en los links y se me ha pasado este). No creo que ya sirva la rta. pero ahi va.
Entiendo tus ejemplos pero no veo el problema, me parece que tienen mucho problema en distinguir objs. del Modelo y Controladoras de proceso (o Caso de Uso).
Podes crear objetos de tu modelo sin que persistan como eso de tener una clase Reporte, aunque esta no perteneceria al modelo sino que seria alguna controladora de proceso con sus metodos que cumplimenten los requisitos funcionales que necesite.
En el caso de la Renuncia del empleado esto seria un metodo que deberian ponerlo en una clase apropiada a tal efecto (ej: una controladora de renuncias) y alli recibir algun parametro para saber si lo echaron o no; o mejor aun aplicar algun patron estrategia (strategy Gof) sobre la clase Renuncia con un metodo renunciar.
Saludos y perdon x la tardanza

Selvio Guzman dijo...

Muy chulo todo, que Dios te bendiga y sigue trabando como hasta ahora