8/11/2010 13:19 El Bruno

[ENTLIB] ¿Porqué a la gente no le gusta Enterprise Library?

image

Buenas,

hace un par de días escribí un post donde comentaba el roadmap de Enterprise Library para el año 2011 y como el mismo apuntaba a dar soporte a ASP.Net MVC y a Silverlight. Al margen de lo bueno o malo de esto, una vez más me encontré con amiguetes y compañeros que le pegan a EntLib por donde menos le duele, en este caso por Twitter Rodrigo (@r_corral) y Javi (@jcalvarro); y en vivo un par más. Así que, intentando ser neutral (como un suizo como me diría Hadi @hhariri), comentaré lo que usualmente escucho sobre EntLib y mi opinión al respecto.

 

1. Algunos bloques están desfasados

Pues sí y es una pena que no los saquen de la lista de bloques, porque seguir teniendo un bloque para la gestión de la seguridad no tiene sentido. Por ejemplo, desde Visual Studio 2005 los Membership Providers dan una excelente solución para escenarios de autenticación y autorización, no veo necesario seguir manteniendo el Application Block de Seguridad (ni hablar de WIF, etc). Otro ejemplo es el Caching Aplicacion Block. El mismo tenía su razón de ser cuando queríamos tener capacidades de Caching en entornos no Web por favor, no agregues como referencia System.Web en una aplicacion Windows; pero ahora que .Net Framework 4.0 tambíen nos dá esta capacidad, pues bueno, será momento de ir reciclando.

Un dato en este punto, varias de las funcionalidades que posee EntLib, han llegado luego al Framework y se han eliminado de EntLib. El mejor ejemplo, es tal vez la gestión de la configuración que antes de .Net Fwk 2.0 era un poco infierno y el Application Block de Configuración era una ayuda que se agradecía; ahora con System.Configuration pues ya tenemos el problema resuelto.

 

2. La ejecución de los bloques es muy lenta

Este es otro de los argumentos que dan para debatir un rato largo. Por lo general aplica al Logging Application Block, pero yo aqui siempre intento hacer un ejercicio para ver la mejor solución posible porque no todas las aplicaciones tienen requerimientos funcionales que necesiten grabar millones de logs por milisegundo y si lo tienen, seguramente tampoco .Net pelado es una opción. Comento un ejemplo reciente.

En un cliente utilizamos LAB (Logging Application Block) para dar soporte a un sistema de mensajería interna y trazas entre aplicaciones. Como la app funciona correctamente, un directivo, en un acto que demuestra su inteligencia y su gran capacidad de razonamiento propone mover el esquema físico de la aplicación a todas las dependencias de la empresa en España, Portugal, Francia, etc. Vamos que sin preguntar, cae un marrón de esos que asustan. A mi personalmente, estas decisiones poco me importan, ya que si se puede –> BIEN, y sino se puede o es una venta de humo; pues se hace BIEN O NOS VAMOS. Pero le dimos una pensada y una pensada de las buenas, y llegamos a la conclusión de que aprochando las capacidades de trabajo asíncronas con colas MSMQ de LAB podiamos desplegar la aplicación, centralizar la grabación de logs y cambiar de repositorio desde el visor de eventos a una base de datos SQL, sin tocar una línea de código, simplemente modificando la configuración. Comento este caso, porque un compañero estaba dispuesto a escribir un artefacto de la muerte encargado de hacer todo este trabajo, y yo intenté hacer de “suizo” para obtener la mejor solución posible. En el ejemplo anterior, después de analizarlo lo importante no era “la velocidad” de ejecución de los bloques, sino la capacidad de los mismos; para velocidad algún día comentaré las trazas de una aplicación de banca que realmente asustaba Sonrisa.

Un dato final, es cierto que en las versiones iniciales de EntLib la carga de ensamblados era muy lenta, ya que la creación de objetos se realizaba con una factoria llamada ObjectBuilder, que creaba tipos  por reflection a partir de una configuración, etc. Ahora con Unity, este modelo ha cambiado completamente y la “sobrecarga” de trabajo es la que posee Unity; además se ha deshabilitado por defecto la notificación de eventos, se han eliminado los eventos WMIs, etc.

 

3. Prefiero escribir el código sensible de una aplicación yo mismo

Aquí hay discusión para rato, y no las clásicas “yo soy más inteligente que los de Patterns and Practices”, o que “los de P&P son muy feos”; sino más bien relacionada con el contexto  de negocio de una aplicación. Me explico; los bloques de trabajo de Enterprise Library son muy generalistas, son soluciones generales a problemas usuales. Si bien, creo que cubren la casuística de muchos escenarios, en algunos casos es necesario optar por una solución propia o modificar alguna parte de EntLib para dar por cerrado estos problemas.

Por otra parte, EntLib es código abierto, asi que puedes leerlo y criticarlo todo lo que quieras. De buena fuente, sé que el equipo de P&P están abiertos a recomendaciones y cambios. Un ejemplo de ello, es que en EntLib4, se entregaban todos los bloques y Unity como componentes separados; pero era un poco “cantoso” que la propia EntLib no se desacoplara utilizando Unity, asi que en EntLib5 ya está todo desacoplado.

Volviendo a los términos “codigo sensible” y “yo mismo”; pues aquí mi recomendación es: cuidado. Muchas veces queremos ser mejores que el mejor y a la larga los que sufren las consecuencias son nuestros clientes eso en mi caso que a mi nómina me la pagan mis clientes y ellos tienen que estar contentos y satisfechos Sonrisa, si a tus clientes no les importa que las aplicaciones no funciones o que los proyectos se atrasen pues te envidio Aunque si lo que escribes es mejor o más útil, pues compártelo que para eso estamos.

 

Podría seguir escribiendo un buen rato, ya que he escuchado otros puntos como:

 

Finalmente, si tienes algo que comentar del porqué no te gusta Enterprise Library, Codeplex es un excelente lugar o este post para ver una versión en español.

 

Saludos @ Here

El Bruno

   

Archivado en: ,
Comparte este post:

# re: [ENTLIB] ¿Porqué a la gente no le gusta Enterprise Library?

Monday, November 08, 2010 1:27 PM by Ernesto

A mi me gusta... como le decia a Corral ayer, para algunas aplicaciones en que no uso ORM el Data Application me ayuda mucho a tener un codigo mas elegante y ordenado que usando ADO.Net "puro", otro tanto para el Log, con configurar bien tu archivo de configuracion, listo... invocar Logs es sencillisimo....

Que si, que algun que otro bloque haya quedado desactualizado, pero la verdad que tener esas herramientas de apoyo es util.

# re: [ENTLIB] ¿Porqué a la gente no le gusta Enterprise Library?

Monday, November 08, 2010 8:22 PM by Unai

Bruno, la verdad, el otro dia cuando lei tu post sobre el roadmap estuve a punto de hacer alguna gracieta, lógicamente desde el cariño que te tengo claro, y sabiendo tú que yo tengo un especial desencanto con EntLib. No obstante, la verdad es que esta reflexión que haces en el post es tan constructiva que no puedo sino que darte las gracias y dejar mi granito de arena.

Los puntos que se eponen son muy acertados, sobre todo el primero acerca de cual es relamente la funcionalidad que ofrecen y cual de esta funcionalidad es acertada y no la tenemos de base en el framework, configuración, seguridad, datos, IoC ( habria que ponerse tonto en discusión pero hasta en el P&P Symp de Redmon, si, he ido para ver al enemigo :-), comentaron la alineación de MEF como IoC en el mismo sentido de Unity, vamos que tarde o temprano Unity vuela.

El segundo punto, y el que a mi más me preocupa es el propio concepto de Pattern & Practice, porque da a entender que la utilización de esto es en si la utilizacion de una práctica recomendada y buena cuando ni de lejos es así, y me explico. Para entender una buena práctica hay que conocer la mala y el problema. Mucho del código que por desgracia tengo que revisar carece de buenos fundamentos y está apoyado en EntLib, que por otra parte en demasiadas ocasiones favorece los "malos fundamentos".

En definitiva, mi "repulsa" en general hacia EntLib viene más por el hecho de que se usa como arma contra la mediocridad que por el echo de los bloques en si mismos, aunque te podríamos enseñar unos cuantos volcados de memoria para que te llevaras las manos a la cabeza :-)

Saludos

Unai

# re: [ENTLIB] ¿Porqué a la gente no le gusta Enterprise Library?

Monday, November 08, 2010 9:10 PM by Rodrigo Corral

Uffss.... esto daría para mucho, pero voy a dar mi opinión 'en breve'.

El punto más importante es que tu enumeras en primer lugar. El 90% de la funcionalidad de EL ya está, y mejor resuelta en el propio Framework. Esto mismo es suficiente argumento para evitar añadir complejidad gratuita a tu aplicación usando EL. Es lo mismo que la gente que usa Log4Net en lugar de System.Diagnostics...

Otro problema es que EL siempre te obliga a añadir complejidad adicional a tu solución. Realmente necesitas tener 150 posibilidades de logeo y arrastrar el código y la complejidad asociad... o lo que necesitas en una aplicación es elegir como vas a logear y hacer el código más simple posible que cumple tus necesidades. Yo creo, siguiendo el principio KISS y el principio YAGNI que esto último es mejor opción.

Creo que EL durante un tiempo fué una gran referencia sobre como resolver ciertos problemas. Ya ni eso. Era una gran referencia donde mirar, pero no algo que quieras, por su complejidad, en la arquitectura de tu aplicación.

En el Debugging & Optimization Team de Plain Concepts nos encontramos muchísimas veces con problemas relacionados con EL. No nos engañemos EL no esta ni de lejos tan testeado con el Fx y eso se paga.

Ya no te cuento las aberraciones que hace la gente que crea su propio fork de EL. Que no son pocos. Nadie crea un fork del Fx, pero tener disponible el código hace que mucha gente tome la decisión erronea de 'tunearlo', 'adaptarlo a sus necesidades', etc... que miedo... no eres capaz de implementar un simple wrapper sobre System.Diagnostics para simplificar el logeo adaptandolo a las necesidades concretas de tu aplícación y te tocas toda la EL... lo he visto demasiadas veces como para no temer el uso de EL.

Hoy por hoy los motivos para usar EL son cero.

Entiendo que tu, siendo de Avanade, padres de la criatura, le tengas cariño, pero sinceramente, no hay justificación para usarlo en un proyecto que abordes con Fx 4.0. En los tiempos del 1.1 quizás, ahora no.

Gracias por abrir el debate Bruno, nos enriquece a todos. Todos mis comentarios se deben tomar desde le respeto que te tengo como técnico, quede claro.

Un saludo titán!!!

# re: [ENTLIB] ¿Porqué a la gente no le gusta Enterprise Library?

Monday, November 08, 2010 9:55 PM by Samuel Suarez

Bruno, totalmente de acuerdo en todo, al igual que con Unai y Rodrigo (exceptuando la parte del fork de EntLib, no tenía ni idea de que hubiera gente tan osada en el mundo).

De todos los proyectos en los que he estado en mi cortísima vida profesional, solamente me he visto con la EntLib una única vez. El cuello de botella que nos provocaba el Logging lo solucionamos con un wrapper sobre System.Diagnostics, y nos quedó unicamente lo otro que usábamos, el Data Application.

Recuerdo la cara de mi Technical Leader cuando comparé el coste en tiempo de configurar el Logging y el de uso del wrapper - no tenía precio.

Pero durante el proyecto llegó el framework 3.0, y EntLib dejó de tener sentido en ese y en otros muchos. Desde entonces, no he echado de menos nada de ella, aunque muchas veces he(mos) considerado usar alguna de sus partes.

Ahora, trabajando en Avanade (yo llegué hace poco, no tengo nada que ver con los padres de la criatura, aunque uso la anécdota delante de mis amigos para chulear...), y en un proyecto con SharePoint + Commerce Server, la idea de usar EntLib ha sido erradicada antes de su nacimiento, el framework 4.0 ofrece ventajas más jugosas. Ahora solamente falta aclararnos entre Unity y MEF.

EntLib R.I.P.