.NET For Your Information

Un blog más sobre tecnología .NET

Desarrollo de Aplicación en Capas con Visual Studio 2008

with 19 comments


Continuando con el post de «Introducción a Programación en Capas con Visual Studio 2008«, el objetivo del presente artículo es dar un pequeño ejemplo técnico y mucho más tangible del desarrollo en capas.

El objetivo de la aplicación a desarrollar es ingresar personas a una base de datos, haciendo uso de los objetos de ADO.NET, y posteriormente calcular su edad.

Para lograr esto, empezaremos por definir la base de datos, la cual sólo tendrá la tabla «persona» con los campos: nombre, apellido y fechaNac.

personaBD

Para efectos de este post no estoy considerando las mejores prácticas en la implementación de base de datos, dado que el objetivo es ilustrar la programación en capas.

A continuación, desarrollamos una ventana en el proyecto «UserInterfaceWPF» denominada «PersonaUI»:

personaUI

Para el desarrollo de esta ventana se utilizó el componente «DatePicker» para la selección de fecha de nacimiento. Este componente forma parte de la extensión WPF Toolkit, que además trae el «DataGrid» que no está incluido en el .NET Framework 3.5. Cabe destacar que el proyecto de inicio por default debe ser el de la capa de presentación. Para lograr esto hacemos click derecho sobre «UserInterfaceWPF» y seleccionamos «Establecer como proyecto de inicio» o «Set as startup project».

Debemos recordar que para poder dar la funcionalidad requerida es necesario agregar las referencias en cada proyecto. Para «UserInterfaceWPF» se debe agregar como referencia a «MetodosNegocio» y «ObjetosNegocio». Para «MetodosNegocio» se debe agregar «MetodosAccesoDatos» y «ObjetosNegocio». Y para «MetodosAccesoDatos» se debe agregar «ObjetosNegocio». Por último se deben citar al inicio de las clases, por ejemplo, en la clase de la ventana PersonaUI se debe añadir: «using ObjetosNegocio;» y «using MetodosNegocio;».

Desarrollando funcionalidad para la clase «PersonaUI», donde estarán los manejadores de los botones «Guardar» y «Calcular edad»:

guardarYcalcular

El objeto «PersonaON» utilizado para definir al objeto «persona», se refiere al objeto fuertemente tipado del proyecto «ObjetosNegocio», definido de la siguiente manera:

PersonaON

Por otro lado, los métodos de la clase «PersonaMN» utilizados para «insertarPersona» y «calcularEdad» fueron definidos de la siguiente manera:

PersonaMN

De igual modo, los métodos de la clase «PersonaAD» como «insertarPersona» o «buscarPorNombre» fueron desarrollados como se muestra a continuación:

PersonaAD1

PersonaAD2

Como han podido observar, en los métodos de acceso a datos utilicé una connectionString completamente legible. Ésta no es la manera más adecuada de hacer uso de ella, sin embargo, este tema quedará para un futuro post. La forma más fácil de generar una cadena de conexión es haciendo uso del Server Explorer y del wizard que provee para realizar este tipo de actividades haciendo click derecho en «Conexiones de datos» y «Agregar conexión». Como siempre, hará falta el nombre del servidor, instancia, base de datos, usuario y password.

Asimismo, tampoco se hizo manejo de excepciones, lo cual es parte importante de una aplicación, tanto por robustez como por seguridad. Este tema también será tratado en un próximo post.

La base de la solución en el «Solution Explorer» debió quedar de la siguiente manera:

solutionExplorer

Por último, pondremos en ejecución la aplicación desarrollada:

Pantalla1

Al hacer click en «Guardar» se almacenará a la persona en la base de datos, tal y como lo hemos definido. Y al introducir el nombre «Alejandro» y hacer click en «Calcular edad» nos devolverá su edad en días (tomando en cuenta que hoy es 14/08/2009):

Pantalla2

Una vez más, espero que este post pueda ser de ayuda para sus actividades como desarrolladores. Bienvenidos sus comentarios, sugerencias, o lo que tengan a bien.

private voidbtnGuardar_Click(object sender, RoutedEventArgs e)
{
PersonaON persona = new PersonaON();
persona.nombre = txtNombre.Text;
persona.apellido = txtApellido.Text;
persona.fechaNacimiento = DateTime.Parse(dpFechaNac.SelectedDate.ToString());
PersonaMN personaMN = new PersonaMN();
personaMN.insertarPersona(persona);
LimpiarCampos

Written by Alejandro Afonso Spinola

14 agosto 2009 a 1:19 PM

19 respuestas

Subscribe to comments with RSS.

  1. […] Tema relacionado: “Desarrollo de Aplicación en Capas con Visual Studio 2008“. […]

  2. […] en el ejemplo del post de “Desarrollo de Aplicación en Capas con Visual Studio 2008“, nos damos cuenta que una de las posibles formas de utilizar el ConnectionString es en el […]

  3. saludos aLejandro
    Podemos ver un ejemplo de tu ejercicio
    para los somos novatos, en estos temas

    Roberto

    8 noviembre 2009 at 12:36 PM

    • Hola Roberto. Si te refieres a un ejemplo de programación en capas, éste precisamente es bien sencillo y está orientado a aquellos que quieran empezar a programar de esta forma. De todos modos, si tienes alguna pregunta, no dudes en escribir. Saludos.

      Alejandro Afonso Spinola

      8 noviembre 2009 at 10:31 PM

  4. Has creado una clase que contenga las operaciones de la coneccion usando Enterprise Library Data Access Block?

    Luis Ffernando

    4 marzo 2010 at 11:33 AM

    • Estoy usanso ADO .Net Entity Framework.
      y la verdad…creo que debería ver terminado el ejemplo de los post para orientarme, podrías ayudarme?

      Juanma

      31 marzo 2010 at 2:37 PM

  5. Buenas, estoy creando una aplicacion de escritorio en 3 capas y he seguido la estructura del primer post. Estoy utilizando MySQL como SGBD. En cuanto a la parte de datos tengo una duda…..para crear la conexion a la BD mediante Datos->Mostrar origenes de datos->agregar nuevo origen de datos, ¿en que proyecto habria q crearlo?¿en presentacion, logica de negocio o acceso a datos?y si es en logica de negocio en cual de los dos,¿objetosNegocio o metodosNegocios?.
    Es que se tiene que crear en un proyecto en concreto.
    Otra pregunta seria…si se hace de esta forma la conexion a la BD, ya no hace falta escribir ninguna clase en C# con la conexion ni nada o como seria?
    Un saludo y gracias de antemano!

    Juanma

    23 marzo 2010 at 9:44 PM

  6. Saludos,

    Muy bueno el tutorial…
    Tengo un poco de experiencia en C# y la verdad que hace mucho queria conocer ciertos detalles de esta tecnica de programacion.

    Pero, tengo una pregunta…
    La programacion en capas admite el uso de LINQ? de ser asi, como aplicarlo?

    Muchas Gracias,

    Richard

    28 abril 2010 at 8:11 PM

    • Hola Richard. La principal característica de la programación en capas es su flexibilidad, por lo que sí admite el uso de LINQ. Cada desarrollador es encargado de decidir cómo hacer encajar cada herramienta que decide incorporar, aunque yo en tu lugar lo haría en la capa de acceso a datos, dado que LINQ precisamente se encarga de todas las operaciones CRUD de interacción con la BD.

      Alejandro Afonso Spinola

      29 abril 2010 at 4:27 PM

  7. hi… alejandro alfonso muy bueno tu post me encante y te agradeseria muchisimo si me isieras llegar el preoyecto completo par poder tenerlo como guia en mis proyecto y una pregunta seria posible que me pudieces ayudar con un pequeño problema que tengo .
    quisiera realizar un formulario de conexion para mi proyecto y osea don pueda introducir servidor, usuario,la clave,base de datos me digieron que utilizara odbc pero me confundi mas porque tengo que crear un odbc por codigo o manualmente la cuestion es que cuando lotenga que instalar en cualquier ordenador este formulario busque dicha conexion y poder habilitar el proyecto y todas las funciones que tengo ahi dentro te lo agradeceria mucho ha.. y para estoi es necesario crear una nueva capa que se llamari a de conexion? grasia por elerlo y espero tu respuesta que dios te bendiga

    omar10031980

    10 julio 2010 at 5:59 PM

  8. hola
    mi consulta es la siguiente
    toy programando un sistema pero para sitio web.
    con respecto a las capas tengo una llamada CapaDatos y otra Capanegocio.
    ¿como puedo poner las referencias de cada y en donde?

    salomon

    23 julio 2010 at 3:29 AM

  9. Muy buen tutorial, me sirvio muchisimo y ahora estoy programando con capas y la verdad he quedado muy contento usando capas.

    Saludos desde México.

    Javier Medina Cervantes

    3 noviembre 2010 at 7:49 PM

  10. Hola, estoy leyendo tus post relacionados con programación n capas, felicidades.
    Pero te tengo una consulta, para la capa negocios utilizas Objeto Negocio y Métodos Negocio…

    hablando en común y silvestre, eso es la división de en una clase: las properties y en otra clase; los métodos ?? cierto?

    Porque en mi caso por ejemplo (en capa de negocio), yo suelo usar solo una clase por objeto: Proforma: sus propiedades y métodos clásicos ABM, Pedido también, Venta, Persona, etc etc.

    Y para el caso de capa de DATOS, utilizas una clase por objeto también? No se volvería inmenso el proyecto si se utiliza una x cada objeto? no sería mejor una sola clase?

    O qué propósito tiene hacerlo como lo muestras en tu ejemplo?

    Gracias, espero me respondas y así nos ayudemos =)

    Slds,

    Lizzy

    7 agosto 2011 at 4:22 PM

  11. Muy clara la explicacion. sobre todo la primer parte que es la que nunca te explican y es fundamental para que la aplicacion funcione

    Ger

    12 noviembre 2011 at 10:34 AM

  12. Muy buen post, la vdd me sirvió mucho. Pero ahora tengo una duda.

    Cuando estaba agregando las referencias de cada proyecto todo iba muy bien hasta que al querer agregar las referencias de la capa de datos (MetodosDatos hace referencia a ObjetosNegocios) me dice lo siguiente: «A reference to ‘ObjetosNegocios’ could not be added. Adding this project as a reference would cause a circular dependency». ¿Es estrictamente necesario que exista esta dependencia?

    Tambien concuerdo con lo que dice Lizzy. ¿Es necesario separar las clases y los métodos en la capa de Negocio?

    De antemano muchas gracias por el post.

    Luis

    23 noviembre 2011 at 11:42 AM

  13. Hola,

    Felicidades por el post. Sencillo y práctico. Muy buena combinación.

    Se que este post es algo viejo ya, pero habrá un siguiente post que continue hablando sobre el desarrollo de aplicaciones en capas con VS? De no ser así, podrías recomendarme/nos bibliografía relacionada con el desarrollo de aplicaciones en capas y VS?

    Muchas gracias, un saludo.

    cr0hn

    3 julio 2012 at 11:10 AM

  14. Hola,
    Muchas gracias por el post. En realidad conocía algo de programación en capas y ya lo estaba haciendo, sin embargo los conceptos no eran tan claros para mí en especial la capa de negocios.
    Alejo me quedó una duda en cuanto a esta capa de negocios:
    En los métodos de la clase “PersonaMN” primero colocas un espacio de nombre MetodosNegocio. Mi pregunta es, si tuviera más clases en esta capa correspondientes a otra interfaz de usuario (otro forms)
    tendría que meterlo dentro del mismo espacio de nombre? por ejemplo en un proyecto que empiezo tengo muchos formularios.

    Algo más, me gustaría que en el futuro los ejemplos no fueran imagenes sino texto para copiar y pegar, facilita las pruebas en especial para mí, que no conozco c# y tengo que convetirlo en VB.net en una página y tengo que escribir otra vez el codigo mirando vez tras vez en tu página. Si puedes hacerlo quedaría super.
    Gracias

    Sol Pertuz H

    22 noviembre 2012 at 7:11 AM

  15. Que seria lo primero a desarrollar?? con cual capa se empieza?? tienes primero la grafica pero se necesita tener objetos ya creada. Cual seria la primera a desarrollar??

    Cristian

    22 noviembre 2013 at 1:33 PM

  16. Hola me genera error con el datetime a alguno le pasa lo mismo???

    CRISTIAN RENGIFO

    3 diciembre 2013 at 5:23 PM


Replica a Roberto Cancelar la respuesta