martes, 8 de diciembre de 2009

N-Tier Application – Parte 1

 

El objetivo de este articulo es demostrar como una aplicación web puede trabajar en capas, mejorando así la mantención del código, y mejorando el desarrollo.

 

[C#]
 

14 comentarios:

  1. Muy bueno el post, Leandro muy interesnte como siempre, seria bueno si te das un tiempo, y publicas algo de un ejemplo de facturacion, tengo una duda en la entidad factura como deberia estar formada, ya que la factura tiene cabecera y detalle, dentro de la cabecera esta el codigo del cliente y asi , como deberia ser la entidad factura???, Son dudas que me quedan y a lo mejor con un ejempo tuyo como el de estos post nos ayudas a aclarar a muchos la forma correcta de usarlos.. Saludos y felicitaciones

    ResponderEliminar
  2. Fernando, gracias por el comentario.
    Como habras visto este artículo esta a medio terminar, aun falta para concluirlo y la idea es amplicarlo.
    Ademas esta es solo la parte 1, como dice el titulo, el objetivo final es amplirlo hasta llegar a desarrollar con capas remotas, y con distintos repositorios de base de datos, y si se puede hasta con NHibernate o Entity Framework, pero bueno eso lo haremos de a poco al hacer crecer el ejemplo.
    Lo que se complica un poco es plantear el dominio en el cual desarrollarlo, en tu caso planeas el de una factura, pero este modelo esta algo desgastado, estaba pensado mas bien a una orden de compra, en donde por ahi al final si termine en facturacion.
    Pero bueno de a poco ira creciendo el articulo.

    ResponderEliminar
  3. Estimado Leandro tiene un muy buen blog, ayuda mucho a los que estamos iniciando en el mundo del desarrollo, seria bueno ver si continua con las otras partes de este post, que pinta buenisimo, todo lo que intenta mostrar.

    Espero pueda hacerlo pronto.
    Saludos

    ResponderEliminar
  4. hola Cristian

    bueno que sea de utilidad los articulos, tengo tanto en mente y tan poco tiempo, pero bueno de a poco ire completando.

    Como habia comentado anteriormente la idea es seguir con este hilo de desarrollo en capas que se que es un temas que tae miles de preguntas, este fue un post algo apresurado justamente para contestar una consulta en un foro por eso veras que tuvo tan poco explicacion, y solo apunto a un ejemplo en codigo.

    Lo que ocurre es que al ser un tema algo grande, armar un ejemplo completo lleva su tiempo, la idea que tenia es ir mostrando la arquitectura cuando va evolucionando desde capas separadas simples a capas remotas completamente desconectadas, pudiendo cambiar de interfaces web a winform y de base de datos.

    Pero bueno en breve tendre actualizaciones sobre este.

    saludos

    ResponderEliminar
  5. Muchas Gracias Leandro por este ejemplo, me quedo esperando la continuación de este post que pinta buenínisimo y por supuesto las explicaciones a medida que aumente la complejidad; estoy muy interseado en saber como es el asunto de la interacción web con winform, espero que pueda verlo pronto, saludos

    ResponderEliminar
  6. Disculpa soy nuevo en esto y tu ejemplo me resulta muy util pero cual es la base de datos que usas ??

    Cuando lo ejecuto em manda un mensaje sobre la base de datos que no es puede acceder en modo remoto

    ResponderEliminar
  7. hola Cristhian

    Disculpa la demora en la respuesta

    La base de datos que se esta usando es Sql Server Express 2008

    Veras en la carpeta App_Data del proyecto de UI, que esta el archivo .mdf, esa es la base de datos

    Por supuesto necesitas que este presente el Sql Server Express, iniciado para que se adjunte dinamicamente al servicio.

    saludos

    ResponderEliminar
  8. Tuttini...Descargue el ejemplo, lo quise ejecutar de primerá para ver que hacia y me manda el mensaje de que no puede cargar el tipo "_csharp_GridViewCombosAnidados._Default"...¿como lo soluciono?

    P.D: En más de una ocación e tenido dudas y muchas de tus repsuestas an sido de gran ayuda.
    ¡¡Felicidades!!

    ResponderEliminar
  9. Hola Leandro ... descargue el ejemplo y cuando quise ejecutarlo me dicé que hay un error al cargar el tipo:
    "_csharp_GridViewCombosAnidados._Default"
    ... ¿como lo soluciono para poder ejecutar la aplicación?...

    P.D Felicidades por tu blog...

    ResponderEliminar
  10. hola Miguel Angel

    Abri el proyecto para validarlo y algo que note es que me ha quedado mal el nombre del formulario web con la clase que usa.

    Imagino el error es: "Could not load type '_csharp_GridViewCombosAnidados._Default'."

    Para solucionarlo cambia esta linea
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PedidoReparacion.aspx.cs" Inherits="ServiceSenter.UI._Default" %>
    es la primer linea del aspx

    como veras define:
    Inherits="ServiceSenter.UI._Default"

    saludos

    ResponderEliminar
  11. Me sumo a los comentarios positivos.
    En realidad queria dar una idea nada mas a la contestacion que propones sobre el comentario de Fernando S. y me parece fabulosa la idea de desarrollar mas este ejemplo. Entre las ideas que puedo aportar con el favor de que me hagas correccion si me equivoco estan:

    1. Entidad Orden-Detalle para poder conjugar en una aplicacion diferentes tipos de ordenes en la misma aplicacion por ejemplo: Orden de ingreso a Bodega, Orden de Trabajo, y Factura centralizando en Dos tablas relacionadas ya que se pueden eredar por medio de clases sus caracteristicas.
    2. Por otra parte conozco de la potencialidad que posee C# pero en realidad muchos necesitamos del codigo en VB para poder aprender.

    Me despido anteponiendo mil veces mas mi agradecimiento a tu labor y felicitandote.

    ResponderEliminar
  12. Desde hace tiempo leo tus blogs leandro, sinceramente son muy claros tus conceptos, gracias por la simplicidad al tratar temas q son realmente complejos.

    Tengo una consulta que hacerte respecto al modelo en capas.

    Supongamos q tengo 3 capas
    1 - Entities (objetos POCO)
    2 - DAL (Repositorios)
    referencia a Entities
    3 - Mi App (cualquiera consola/Winforms)
    Referencia a DAL

    Hay alguna forma de solo referenciar en Mi App, solo a la capa DAL y obtener las entities que estan en la capa inferior, sirve DI o IOC para resolver este tema, lo que no queremos hacer es
    solo agregar la referencia a la DAL y que poder acceder a la capa de Entities tambien.


    Desde ya gracias por tu tiempo !!!
    Saludos Cordiales

    ResponderEliminar
  13. hola Guillermo

    el tema es que necesitas de algun medio para intercambiar informacion entre las capas, usar las entidades POCO es lo que generalmente se usa

    IoC en este caso no aplica, podrias usarlo para desacopar la interaccion con la DAL para tener mas de una implementacion, usarias una interface para esto

    pero no se usa IoC para desacoplar entidades

    de casualidad estas suando algun ORM?
    podrias crear otro proyecto de entidades que sean DTO Data TRansfer Object, entonces en la DAL mapeas la entidad POCO con el DTO devolviendo este ultimo como respuesta, igual esto suele usarse cuando tienes una capa de negocio o aplicacion, no se hace cuando el UI accede directo a la DAL

    saludos

    ResponderEliminar
  14. Estimado Leandro.

    Por favor podria ilustrarme como trabajar en Capas pero que se incluya un Web Services.

    Gracias.

    ResponderEliminar