jueves, 31 de julio de 2008

7 artículos sobre la arquitectura de WCSF

Preguntas como por que se colocan las propiedades en la interfase de la vista, que debe de ir en el Application controller y para que nos sirve, y como agrupar los módulos y que poner en ellos, son algunas de las respuestas que encontraras en estas publicaciones de Simon Ince un Consultor de desarrollo de Reino Unido.

Definitivamente el tema de WCSF a regresado a este blog e iniciare una serie de "Post" al respecto, muy probablemente incluyendo Unity y la Entlib 4.0.

Para los que no sepan que es WCSF (de sus siglas en inglés Web Client Software Factory), pueden ver post pasadas he escrito sobre el tema y allí encontrarán los sitios oficiales de la WCSF, que dicho sea de paso se quedo en la version 2.0 para correr en 2008 y muchos de nosotros de los seguidores de las factories estamos esperando la nueva versión liviana con Unity que mpuleio esta realizando desde hace varios meses (puedes checarlo aquí: http://blogs.msdn.com/mpuleio/archive/2008/05/21/converting-the-composite-web-application-block-to-unity-using-the-unitycompositioncontainer.aspx)

Para los interesados en capas (no tan novatos en el tema) Simon toca el tema repetidas veces y haces excelentes observaciones y sugerencias.

En el primer post es una introducción sobre la elección de una arquitectura base, los patrones utilizados en la WCSF el MVP (The Model-View-Presenter) y el Application Controller. http://blogs.msdn.com/simonince/archive/2008/06/05/wcsf-application-architecture-1-introduction.aspx

En el segundo post explica de una forma magistral el uso del Application Controller y abstrae el concepto de una forma sobresaliente o "outstanding", el cual le llamo Page Flow Slave y lo que hizo fue separar la lógica del negocio y permitir al controlador que decida como debe de navegar la página, simple y hermoso.

http://blogs.msdn.com/simonince/archive/2008/06/06/wcsf-application-architecture-2-application-controller.aspx

En el tercer post, (gua!) expone sobre el Modelo MVP, y explica algo que me abrió completamente los ojos, y fue lo siguiente:

El presenter no tiene porque involucrarse con ninguna tecnología de Asp.Net, el solo conoce un contrato de la vista y allí debe de incluirse todo, lo que verán en el código de este tercer post es que cambio la referencia en el presenter de context.current.Identity.name por una propiedad llamada UserName de la interfase que representa la vista y además esto facilita la prueba de la lógica del presenter, además de ser un diseño desacolpado.

Por ultimo en este tercer post, presenta con mucha claridad la separación de responsabilidades del Controlador, lógica de negocio y el presentador de la siguiente forma:

class MyViewPresenter : Presenter<IMyView>

{

void ViewLoaded()

{

View.DisplayText("Welcome");

}

void OnExit()

{

BusinessLogic.ExitUser(View.CurrentUsername);

ApplicationController.CompleteExit();

}

}

El presentador se encarga de mostrar la data proveniente de la capa de negocios y de responder a los eventos del usuario (o la vista) pero deja al controlador la lógica de la navegación y desconoce el ambiente del controlador y de la lógica de negocios. El controlador interactúa con el módulo base de las WCSF donde esta implicado la infraestructura de ASP.NET y la lógica de negocios interactúa con la capa de datos. Es decir nuevamente el principio de la separación de responsabilidades.

http://blogs.msdn.com/simonince/archive/2008/06/11/wcsf-application-architecture-3-model-view-presenter.aspx

El cuarto post, hace una pausa en las WCSF para hacer una reflexión importante sobre las oportunidades que si tienen para mejorar el código abstrayendo y desacolplando el código, de tal forma que le quito la responsabilidad al controlador de manejar la navegación a nivel de comandos de asp.net y lo abstrajo en otro objeto que bien puede ponerse en el modulo base o fundational para diluir responsabilidades. Los dejo con el código resultante y vean lo detalles en el post original:

class ApplicationController

{

private INavigationService _navigationService;

[ServiceDependency]

public INavigationService NavigationService

{

set

{

_navigationService = value;

}

}

public void CompleteWizard()

{

_navigationService.Navigate(Screen.Home);

}

}

El cuarto post:

http://blogs.msdn.com/simonince/archive/2008/06/16/wcsf-application-architecture-4-environment-abstraction.aspx

No menos importantes los siguientes post abarca los temas de modularidad, estructuración de los módulos y servicios. Lamentablemente aunque menciono algunos aspectos muy importantes se le escapo algunos detalles en código, se requiere un nivel mas avanzado de manejo de patrones de diseño para entender con claridad las ideas propuestas. Los dejo con el link que los lleva al resto de links:

http://blogs.msdn.com/simonince/archive/2008/07/18/wcsf-application-architecture-7-remote-logic-with-wcf-services.aspx

Espero haber generado el interés que me provocó a mi al leer estos 7 posts sobresalientes sobre la WCSF.

Code4Fun!,

Manolo Herrera

No hay comentarios.: