none
WPF, MVVM y arquitectura en capas

    Question

  • hola, mi consulta es la siguiente: yo siempre hice aplicaciones con WinForm con arquitectura en capas, ahora quiero hacerlo con WPF usando MVVM manteniendo la arquitectura en capas. Entonces en la capa de presentación yo antes tenia las interfaces que va a ver el usuario, la capa de reglas de negocio, donde están definidas justamente las reglas y ademas las clases; y la capa de datos. Por lo que pude leer de WPF con MVVM es correcto deducir que la Vista se ubicaría en la capa de presentación, el ViewModel correspondería a la capa de reglas del negocio, y el Model correspondería a la capa de datos ?

    Desde ya muchas gracias.

    Thursday, June 30, 2011 11:13 PM

Answers

All replies

  • Hola Andres

    Te dejo un enlace a una presentación muy buena con respecto a MVP (Model-View-Presenter), MVC (Model-View-Controller) y de MVVM(Model-View-ViewModel).

    Desde la página 30 comienza la parte de WPF y MVVM, pero sobre todo en la página 51 encontrarás una imagen que se explica sola. Espero te ayude. http://www.slideshare.net/Jaffel/introduction-to-design-pattern-mvvm.

    Otra imagen aqui y una buena explicacion http://karlshifflett.wordpress.com/mvvm/wpf-line-of-business-introduction/

    WPF Application Framework que te ayuda a crear aplicaciones WPF bien estructuradas. Segun leí tienen un template utilizando una base de datos, asi que de ahi puedes partir para hacer un proyecto de ejemplo.

     

    Saludos


    Antonio Lobo
    Mi Blog
    Friday, July 01, 2011 3:36 AM
  • Gracias por los links, estan buenos. Me surge la duda de como implementar lo siguiente hecho con WinForm, como hacerlo en WPF y MVVM: aqui estoy en el Form inicial que tiene un treeView, y al seleccionar un nodo se muestra una ventana. Ademas el form inicial tiene una View, un ViewModel pero no si es necesario (o que tiene) el Model ?

    private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
          if (treeView1.Nodes[0].Nodes[2].Nodes[0].IsSelected)
          {
            frmCuentasAltas frmCA = frmCuentasAltas.InstanciaSingleton();
            frmCA.MdiParent = this;
            frmCA.Show();
          }
          else ...
    


     Desde ya muchas gracias.

    Friday, July 01, 2011 10:48 PM
  • Hola Andres

    La verdad es que según el patrón MVVM se trata de hacer el menor uso de code-behind, así que si no estoy mal, eso se debería tratar con un Behavior - o muchos lo tratan de esta forma-.

     

    Enlaces:

    http://stackoverflow.com/questions/4295897/wpf-double-click-treeviewitem-child-node

    http://sachabarber.net/?p=532 <-- Usa ListBox pero es casi el mismo proceso

    http://stackoverflow.com/questions/4497825/wpf-mvvm-how-to-handle-double-click-on-treeviewitems-in-the-viewmodel

    http://stackoverflow.com/questions/1035023/firing-a-double-click-event-from-a-wpf-listview-item-using-mvvm <-- code-behind no es tan malo

     

    En realidad el patrón MVVM a veces puede salvarte de cosas que en Window Forms te llevaría mucho y hay veces que solamente tu deseas quebrar el patrón y hacerlo como tu quieras, lo digo por experiencia, sobre todo odio mostrar un dialogo modal usando MVVM es tedioso :).

     

    Saludos


    Antonio Lobo
    Mi Blog
    Saturday, July 02, 2011 3:14 AM
  • Hola Andres

    Siento decirtelo, pero estás totalmente equivocado.

    MVVM es un patrón de diseño de la capa de presentación.

    Tus capas de Negocio y datos continuan igual que siempre. El cambio es que, en la presentación en vez de definir una vista (.xaml) y en code behind tener todo el código usas una viewmodel para contener la logica de esa vista y el Modelo sería tu lógica de negocio que se encontraría en tu capa de negocio.

    Tengo una explicación muy sencilla de esto en mi blog:

    www.http://geeks.ms/blogs/jyeray/archive/2010/10/25/compartiendo-c-243-digo-m-243-vil-web-escritorio.aspx

    Tambiñen puedes hecharle un vistazo al tercer capítulo de mi libro sobre silverlight y windows phone, aunque no habla exactamente de WPF, el uso del patrón es común a Silverlight, Windows Phone y WPF, por lo que puede servirte como referencia:

    http://geeks.ms/blogs/jyeray/archive/2011/06/08/wp7-libro-por-cap-237-tulos-programar-en-silverlight-para-windows-phone-tercer-cap-237-tulo.aspx

    Y sobre todo recuerda, MVVM es solo para la capa de presentación y su máxima es: 0 lineas de code behind, no evento, separación de responsabilidades.

    Un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    Saturday, July 02, 2011 7:21 AM
    Moderator
  • Hola Andres.

    Ademas de la informacion de los compañeros,

    en este post tambien se habla del tema:

    http://social.msdn.microsoft.com/Forums/es-ES/wpfes/thread/c63ca7fd-fbf1-43c7-9cb4-d87a232f5faa

    y en el incluyo un link a un libro(gratuito) de lectura muy recomendable si quieres trabajar con N-capas.

    http://msdn.microsoft.com/es-es/architecture/default.aspx

     

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    Tuesday, July 05, 2011 4:33 PM
  • Hola Andres

    ¿Has resuelto tus dudas? Por favor, no dejes de marcar las respuestas que te han ayudado, así cualquier otro usuario puede encontrar la respuesta correcta.

    Esto es MUY IMPORTANTE para el correcto funcionamiento del foro.

    Muchas gracias.


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    Tuesday, July 05, 2011 5:48 PM
    Moderator
  • Gracias por las respuestas, por lo que ha visto me queda claro que el View y el ViewModel estan en la capa de presentacion y yo pienso dejar el Model en la capa de negocios ya que luego de buscar bastante he encontrado un ejemplo que lo usa de esa manera.

    Por otra parte he visto videos donde se opina que no esta prohibido para ciertas circunstancias el uso del codebehind, en fin es cuestion de ir probando me parece porque es la forma de entenderlo, gracias nuevamente.

    Thursday, July 07, 2011 2:01 AM
  • Hola Andres

    Tal cual dijo Josue, lo mejor es marcar las respuestas que te ayudaron a responder tu pregunta. Por ejemplo las respuestas de Josue, David y mia daban una guía con respecto al tema, en cambio la ultima respuesta que ha dado el compañero Josue en realidad solo es para saber las dudas que tienes, asi que en mi opinion no es lo mas conveniente marcarla como respuesta sino las otras.

     

    PD: no lo tomes a mal, solo es un consejo para una proxima ocasion.

     

    Saludos


    Antonio Lobo
    Mi blog
    Thursday, July 07, 2011 5:53 AM
  • Buenas!

    Totalmente de acuerdo, marca la/s respuesta/s que te ayudaron, la ultima que puse es solo para recordarte que lo hagas :)

    Muchas gracias!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    Friday, July 08, 2011 6:36 AM
    Moderator
  • Buenas tardes, una pregunta al respecto. He leido que para aplicaciones sencillas (RAD) no merece la pena realizar la aplicacion con MVVM, ¿es cierto? Gracias, un saludo!
    Monday, October 01, 2012 4:09 PM
  • Hola osmagarci.

    RAD por sus siglas es desarrollo rapido de aplicaciones y esto lo ofrece el entorno de desarrollo utilizado, esto quiere decir RAD no es simil de aplicacion sencilla.

    Por otra parte, en cuanto a si merece la pena o no, eso lo tienes que decidir tu como desarrollador, contempla las ventajas y desventajas y opta por la que mejor se adapta a tus necesidades.

    Lo que diga la gente solo lo tienes que usar como referencia para ver diferentes puntos de vista, la programacion no es todo blanco o negro (bueno a nivel de bit si ;).

    Pero tienes que tener en cuenta lo siguiente:

    Todos los patrones de diseño son para dar solucion a problemas y no para implementarlos por que queda chulo o por que es lo correcto o por que lo dice la gente, si tienes un problema, busca un patron de diseño que lo solucione pero no lo busques antes ya que perderas el tiempo, he visto muchas aplicaciones complejas por culpa del uso masivo de patrones la mayoria inecesarios para lo que se implementaba.

    En cuanto a MVVM aqunque en teoria es un patron al igual que MVC, tambien es una metodologia, ya que ademas de solucionar problemas con todos los patrones que implementa, es una forma de desarrollar en base a unas reglas, por tanto puedes hacer uso de el siempre y cuando puedas cojer ventaja de el, la gran ventaja la ofrece la propia metodologia, lo que hace que tengas que programar en base a unas reglas definidas haciendo que la aplicacion siga una convencion y no se disgregen las funcionalidades (como ocurre al programar con eventos) de ahi que en una aplicacion con poca funcionalidad es posible que no te convenga, pero por experiencia lo que empieza con poca funcionalidad acaba teniendo mas de 8000 lineas de codigo y la mayoria de el codigo basura y poco rehusable (como el principio de pareto)

    Y por ultimo estan los principios SOLID, que no son patrones y no son metodologias, tan solo es un grupo de principios y recomendaciones a seguir para desarrollar bajo OO, tampoco hay por que seguirlos, pero solucionan problemas a la larga.

    Todo esto hay que tenerlo en cuenta para desarrollar, y usarlo o no dependiendo de las necesidades, pero ya te puedo nombrar 2 puntos muy importantes que tienen en comun:

    1.- Se aprende a programar en condiciones y da un nivel de experiencia sin parangon (muy recomendado para aprender, aunque te cueste mas esfuerzo, vas a coger mucha experiencia y a fin de cuentas es lo que hace la valia de un programador)

    2.- todos ellos tienen en comun una misma meta, alcanzar una alta cohesion y bajo acoplamiento, lo que permite reusar el codigo, mantener la aplicacion y permitir su escalabilidad sin limites aparentes


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/


    Tuesday, October 02, 2012 6:50 AM
  • Gracias david, me ha quedado claro. La verdad que me extraño leerlo ya que evidentemente aunque hagas una aplicacion pequeña (o RAD, como se quiera nombrar...) es bueno tenerlo presente para posibles ampliaciones de la aplicion, o por lo menos asi lo veo yo. Una cosa que no me ha quedado claro es cuando se habla de la Capa Dominio..... No llego a entenderlo, buscare info a ver que tal ;)

    Tuesday, October 02, 2012 7:42 AM