flozano.com: Haz commit, maldito!
Desarrollo de software y otras pérdidas de tiempo
Desarrollo de software y otras pérdidas de tiempo
Nov 17
El otro día, torpe de mi, estaba migrando una aplicación IIS6 a otra IIS7. Todo parecía marchar bien, a excepción del lazy-loading fuera de los límites de los métodos transaccionales… es decir, en la vista (si, se que es controvertido pasar entidades a la vista… pero mire usted, la vida es dura y no todo es como a uno le gustaría
El caso es que en IIS6 y en el servidor embebido de Visual Studio, la cosa iba perfectamente… pero en el IIS 7.5 no había manera. Entonces sonó la flauta en mi cabeza… cambié la configuración del AppPool de integrated pipeline a classic pipeline y bingo, a funcionar! Pero, obviamente, la idea es olvidarse del doble pipeline de peticiones IIS+filtro isapi, y para eso está el integrated pipeline…
Lo que ocurrió fue que “se me olvidó” que en el integrated pipeline, la sección system.web/httpModules del web.config pinta poco, y hay que mover (o copiar, si quieres que vaya en cualquier entorno) los módulos ahí declarados desde system.web/httpModules a system.webServer/modules… entre ellos, el OSIV, el loader de spring… Una vez hecho eso, el integrated y todas sus ventajas se volvieron a llevar bien con el OSIV de Spring.NET+NHibernate.
El integrated pipeline tiene otras sorpresas, como la imposibilidad de hacer, de forma natural, que haya una doble autenticación “básica” http + forms (bastante común en entornos de preproducción, “pruebas” de cliente, aceptaciones de maquetas…) Para esto he estado pensando soluciones y, la verdad la verdad, veo pocas que me gusten (que me gusten = que no involucren cambiar el código, dado que éste debe ser el mismo en desarrollo/integración que en producción, y en producción no existirá este problema…)
Oct 25
La inyección de dependencias es uno de esos patrones que realmente hay que usar en cualquier proyecto no trivial. En .NET está muy de moda Castle Windsor y algún otro contenedor ligero… pero yo estoy bastante cómodo (de momento, no descarto nada) con Spring.NET. A la hora de integrar Spring.NET con ASP.NET MVC, eché un vistazo a google y nada de lo que ví me convenció realmente (igual no busqué demasiado), así que decidí hacermelo yo.
Aprovechando la facilidad para extender el framework, en el global.asax.cs metemos una línea como esta:
1 2 | // ControllerBuilder, para que se inyecten los controladores. ControllerBuilder.Current.SetControllerFactory(new Arc.Web.Mvc.SpringControllerFactory()); |
y creamos la clase (Arc.Web.Mvc.SpringControllerFactory) tal que así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | namespace Arc.Web.Mvc { public class SpringControllerFactory : DefaultControllerFactory, IControllerFactory { #region IControllerFactory Members public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName) { // Probado y funciona! IController ctrl = base.CreateController(requestContext, controllerName); if(ctrl!=null) { IApplicationContext ctx = ContextRegistry.GetContext(); string objectName = controllerName + "Controller"; if (ctx.ContainsObjectDefinition(objectName)) { ctrl = (IController)ctx.ConfigureObject(ctrl, objectName); } } return ctrl; } #endregion } } |
Luego solo necesitamos definir los controllers en el application-context de spring como cualquier otro objeto:
<object name="AccountController" type="W.Web.Public.Controllers.AccountController, W.Web.Public" autowire="byName" singleton="false"/>
Y ya está
Oct 7
Llevo unas semanas tocando ASP.NET MVC, y me gustaría comentar que es un buen framework para hacer sitios Web. Sin embargo, creo que le queda un gran camino para ser útil en aplicaciones Web. Para mi, son cosas radicalmente distintas en el 95% de los casos. Hay casos en los que está más difuso, pero son pocos.
El caso es que ASP.NET MVC es bueno. Abraza el modelo stateless inherente al HTTP. Abraza también el modelo de recursos “localizables” mediante identificadores uniformes URL. ASP.NET WebForms se olvidaba de todo esto y montaba una capa de abstracción orientada a eventos y componentes, tan potente como peligrosa e inadecuada para según qué proyectos.
ASP.NET MVC tiene fallos, que se pueden solucionar en su mayoría dada su plugabilidad (toma palabro), o que se están subsanando en la versión 2 que vendrá con .NET 4.0 y VS2010 – versión de la que ya hay previews y que parece ser muy interesante.
Cosas que no me gustan de ASP.NET:
Cosas buenas:
That’s all, a ver que trae la próxima Preview de la versión 2!
Mar 27
En PHP las cosas se suelen hacer “a manubrio”, cada maestrillo tiene su librillo y se lo monta como puede: includes por aquí, procesar_peticion() por allá…
Sin embargo, hay opciones que, para proyectos medianos o ya algo grandes, pueden ahorrar mucho tiempo y quebraderos de cabeza. Seguramente en proyectos muy pequeños sean más un incordio que una ayuda… pero cuando las cosas son algo serias, conviene mirarlos. Estos son algunos de los que yo he conocido:
- Cake: Es una reacción a Ruby on Rails… intenta plasmar su modo de funcionamiento en PHP, aunque con algunas diferencias e innovaciones. Lo que no me gusta es que no aprovecha las capacidades que le podría dar PHP 5, ya que pretende ser compatible con PHP4. Es su punto débil en mi opinión.
- Symfony: Es similar a Cake, pero para PHP5. Es muy potente, me gusta bastante, aunque no he hecho ningún proyecto gordo sobre él, así que no sé hasta dónde se quedará corto. Su capa de acceso a datos es muy cómoda de usar.
- Zend Framework: Es el oficial de Zend, la gente que “hace” PHP actualmente. Es muy grande, y extremadamente flexible. Lo que ocurre es que no dicta una manera concreta de hacer las cosas… a mi me encanta, estoy haciendo Webs con ella y me parece muy interesante, pero no creo que sea lo más adecuado para principiantes, o para sitios donde no hay nadie haciendo un seguimiento de las metodologías y arquitecturas utilizadas. En realidad, son librerías que sirven para montarte un framework , pero en sí yo no lo consideraría un framework como otros.
- Dreamweaver: No es un error. Creo que Dreamweaver, con su modelo de servidor PHP_MySQL, sus asistentes y su modelo de programación, es un “Framework”. Usaría el modelo de servidor PHP_MySQL Dreamweaver para mantenimientos SENCILLOS en páginas de usar-y-tirar: backoffices de webs sencillas programadas a mano sin framework… mantenimientos que no van a sufrir grandes evolutivos… La calidad del código no es buena, pero genera código muy probado y es bastante seguro (al menos en las últimas versiones): quotea entradas antes de pasarlas a base de datos… el manejo de sesión es sensato…
- Prado: Es ASP.NET sobre PHP5. Es un modelo de programación radicalmente distinto, basado en controles y eventos. Se trata de programar Web casi ignorando que se trata de Web. Es útil para intranets, aplicaciones Web (no sitios Web) y cuando hay un background de programación RAD orientada a controles y eventos (especialmente si se viene de ASP.NET). Lo hemos utilizado con éxito en proyectos en el pasado, y el resultado fue muy satisfactorio. Ha evolucionado a Yii, un framework similar que abraza un poco más el modelo “Web”, pero yo prefiero PRADO.
Esos son los que más conozco. De momento, mi elección es Zend Framework para sitios Web, PRADO para intranets y Dreamweaver para mantenimientos usar-y-tirar.