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!
Oct 22
Si alguna vez necesitas importar/exportar archivos en .NET, un tío muy majo llamado Marco y sus amigos te hacen la vida mas fácil con una librería llamada FileHelpers (http://www.filehelpers.com).
Esta librería permite importar y exportar registros, que se definen como clases .NET (VB.NET o C#) con anotaciones. Importa/exporta a ficheros de texto delimitados por comas, por tabulaciones, ficheros excel, bases de datos SQL Server, OleDB genéricas, Access…
Es una gozada. La importación/exportación Excel requiere tener instalado el Excel en el servidor, pero la próxima versión no tendrá esta necesidad, lo que hará todavía mas útil este pedazo de software.
Sólo le veo una pega de diseño… no te permite definir “mapeos” complejos, con lo que las clases que definas deberías usarlas solamente como DTOs entre la capa de importación/exportación y el resto de tus capas (bueno, sólo si eres un quisquilloso de las arquitecturas de software como lo soy yo).
Por lo demás, un gran trabajo. Lo usamos a base de bien en uno de nuestros proyectos, y seguro que más adelante seguimos usándolo… se ha convertido en una herramienta básica para mi y para mi equipo.
Ah, es gratis y de código abierto