.net - practices - microsoft enterprise library visual studio 2017
Continuar con Microsoft Enterprise Library? (10)
He estado usando Microsoft Enterprise Library desde antes de que fuera etiquetado como tal para el acceso a datos abstraídos, en lugar de escribir mi propio DAL. Originalmente, solo estaba importando un archivo (sqlhelper.cs) en mis proyectos, pero luego las versiones posteriores requerían que hiciera referencia a toda la DLL, a menos que quisiera poner mucho trabajo en eliminar la funcionalidad que quería.
Supongo que se lanzará una nueva versión de Enterprise Library unos meses después del lanzamiento de .NET 4.0. El uso que hace mi empresa de la biblioteca es probablemente diferente del uso tradicional, diseñamos y desarrollamos aplicaciones web y de Windows para varios clientes. O entregamos los proyectos terminados a los desarrolladores internos para que los mantengan, o si es un cliente más pequeño, mantendremos las aplicaciones.
Debido a la naturaleza del negocio, tengo la suerte de "comenzar de cero" una buena cantidad de tiempo al diseñar una nueva aplicación, en lugar de estar atado a la actualización del mismo código base. El próximo proyecto probablemente me haré la misma pregunta, ¿deberíamos usar la Biblioteca de Microsoft Enterprise nuevamente? Solo usamos los bloques de acceso a datos, y parece ahorrar tiempo durante el desarrollo. Al mismo tiempo, me pregunto cuánta sobrecarga y complejidad estoy agregando al proyecto al usar los objetos.
Gracias de antemano por sus sugerencias.
Actualizar:
La discusión aquí realmente me ha hecho reconsiderar el problema: podría tratarse menos de abstracciones ligeras para acceder a Procesados almacenados, pero una pregunta arquitectónica más amplia sobre por qué todavía estamos vinculados al modelo N-Tier.
Para mí, si se trata de lo que se utiliza una base de datos en la aplicación. En el mundo clásico de 3 niveles / N niveles, la base de datos es un almacenamiento independiente de información de la compañía. Las diferentes aplicaciones (Web, Escritorio, etc.) comparten y acceden a una plataforma de almacenamiento común. En este escenario, los procedimientos almacenados tienen sentido porque actúan como una capa de abstracción entre las diversas aplicaciones y las tablas.
Para otros proyectos, la base de datos es el almacenamiento persistente exclusivo de la aplicación más grande. Se requiere que la UI u otros tipos de acceso (incluidos los servicios web, la comunicación remota, etc.) pasen por el BLL de la aplicación. Este es el escenario para el que más comúnmente desarrollamos, debido a la naturaleza de nuestro negocio.
Dada esta conclusión, crearé dos proyectos prototipo, uno utilizando SubSonic y el otro LINQ. Aunque me preocupa la sobrecarga y la pérdida de fidelidad con LINQ, la reducción significativa del código necesario para el acceso a los datos y la alineación con el tipo de proyectos que desarrollamos, hace que valga la pena verlo.
¿Por qué no SubSonic y evaluar SubSonic en un proyecto más pequeño? Rob Connery trabaja para MS ahora, y ha hecho un buen trabajo al crear la "navaja suiza" de ORMS. El proyecto es ciertamente un producto conocido, por lo que puede tener más suerte presentándolo a clientes y colegas.
Incluido en SubSonic es:
- Interfaz fluida
- Soporte para MS SQL, Oracle, MySql
Consultas agregadas:
se espera doble const = 55.5922;
// overload #1 double result = new Select(Aggregate.Avg("UnitPrice")) .From(Product.Schema) .ExecuteScalar<double>(); Assert.AreEqual(expected, result);
El tiempo de rampa es de aproximadamente media hora. Si terminas odiándolo, ¡ni siquiera has perdido un día!
Aquí hay un artículo muy perspicaz sobre Linq-to-SQL: El Reductor de Capa de Acceso a Datos (DAL) .
Comencé a usar el Bloqueo de aplicaciones de acceso a datos de Microsoft hace varios años. Una vez que Linq fue presentado, me obligué a aprenderlo. Desde entonces, lo he incorporado en todos mis proyectos.
Creo que la Enterprise Library es una buena opción. Está bien documentado y se utiliza con frecuencia. Esto es un bono, especialmente cuando está pasando el código a otros desarrolladores. No creo que esté agregando mucho en cuanto a gastos generales o complejidad, ya que todo está empaquetado bastante bien e instalado en el GAC.
He luchado con esta decisión en interacciones con varios clientes. Como la mayoría de las decisiones arquitectónicas, realmente no hay una respuesta correcta o incorrecta, solo un conjunto de concesiones que deben aplicarse a diferentes contextos de clientes. Al analizar estas compensaciones, la decisión generalmente se reduce a los siguientes pros y contras:
EL PROs
- Microsoft en el espacio de nombres. No es de extrañar que para muchas organizaciones grandes, esta sea la consideración # 1. Además, muchos se sorprenden cuando leen el EULA y entienden el nivel real de soporte de Microsoft para el EL.
- Probado en muchas empresas de gran escala en todo el mundo. Esto no significa que sea la mejor solución, solo que es estable y tiene un impacto de rendimiento de tiempo de ejecución insignificante.
- [Acceso a datos] es probablemente la mejor solución si buscas apegarte a los procedimientos almacenados / almacenados a mano de la vieja escuela.
EL CONs
- Soporte lento o inexistente en el mercado para prácticas prometedoras como ORM, DI / IoC o AOP
- Peso pesado con una sobrecarga correspondiente más alta que otros marcos como Log4Net en el dominio de registro.
- Difícil de personalizar si sales del modelo de proveedor. Tratar con los cambios en el código fuente, la firma y los problemas de implementación / control de versiones de GAC puede ser mucho más difícil con la compleja red de DLL de EL que con un marco de trabajo más ligero.
- Algunas de las cosas para las que las grandes empresas tienen necesidades críticas, como un marco de trabajo por lotes, no han llegado a EL y aún son códigos de propiedad en el marco de Avanade ACA.
La biblioteca de la empresa no es del todo mala, pero el bloque de datos no es tan bueno. Así que guarda la mayor parte de lo que obtienes con la biblioteca empresarial. También tenga en cuenta: gran parte de la Enterprise Library se está reescribiendo en este momento, incluido el bloque de acceso a datos.
http://www.pnpguidance.net/Post/EnterpriseLibrary50UnityConfiguration.aspx
Pero para acceder a los datos, debe consultar Entity Framework, Linq To SQL (no está muerto) o NHibernate (consulte SummerOfNHibernate.com).
Fuera de EntLib, también puede echar un vistazo a Prism.
No tengo nada en contra de EntLib. De hecho, lo estoy usando principalmente para el registro y el manejo de excepciones en un par de proyectos.
Sin embargo, como notó, parte de la biblioteca de acceso a datos le da muy poco. Incluso si el costo de usarlo en sus proyectos es pequeño (ya que ya tiene alguna experiencia con él), todavía hay mejores "productos" de acceso a datos (Linq2Sql, EF, SubSonic, NHibernate, LLBLGen ...) que en el largo plazo le ahorrará mucho tiempo.
La conclusión es: si no le brinda grandes beneficios, no lo incluya en un proyecto solo porque está acostumbrado. Pase un fin de semana en una de las nuevas tecnologías / productos y estoy seguro de que será de mayor beneficio que seguir con DAAB.
Personalmente, creo que Enterprise Library sufre una gran cantidad de software . No lo escogería como una pieza fundamental "solo porque". Debería haber una razón muy convincente para que lo use en un proyecto. He usado algunos de los Bloques de aplicación lanzados anteriormente, cuando se ofrecieron como tales, pero ahora me he mostrado escéptico acerca de saltar a la Enterprise Library completa solo porque estábamos usando una parte de muchas. Hay valor en mantener la complejidad al mínimo en un proyecto, y parte de la complejidad de un proyecto son los componentes adicionales y las bibliotecas a las que se hace referencia.
TODAS las capas de acceso a datos tienen sus lados arriba y abajo. Como contratista, me encuentro con una amplia gama de proyectos. Todos los proyectos que inicié personalmente, he usado los bloques de acceso a datos de Enterprise Library que llaman a S''procs. Es bastante rápido levantarse y seguir, pero más que eso: estoy muy familiarizado con eso. El inconveniente, por supuesto, es la cantidad de código que tienes que escribir.
Un par de proyectos recientes a los que me he unido están usando LINQ / PLINQO. Por supuesto, el soporte del editor es excelente y crea la mayor parte del código para usted, no me impresiona su capacidad de supervivencia para los cambios en la base de datos en vuelo ni estoy impresionado con los obstáculos que tiene que superar para obtener un rendimiento decente.
Honestamente, deberías diversificarte y probar algo nuevo. Esa es la única forma de encontrar los escollos de cada tipo y realmente poder tomar decisiones informadas sobre qué herramienta desea para el trabajo.
También utilizamos EntLib en todos nuestros proyectos. Evaluamos cada bloque de forma independiente y terminamos utilizando el almacenamiento en caché, el manejo de excepciones, el registro y la validación. Los implementamos como DLL locales en la carpeta de la aplicación, agradable y simple.
La conclusión es, elige y elige lo que quieres. Si se ve demasiado abultado, primero compruebe que no está tirando más cosas de las que realmente necesita.
Utilizamos EntLib en nuestros proyectos extensivamente. En general, los bloques que utilizamos son el acceso a datos, el registro, el manejo de excepciones y el almacenamiento en caché. De vez en cuando, también utilizamos inyección de políticas.
En mi opinión, reinventar esas cosas desde cero sería una completa pérdida de tiempo. EntLib tiene miles de horas de desarrollo, horas de control de calidad y es de código abierto. El uso de solo uno o dos bloques todavía vale la pequeña cantidad de gastos generales asociados con el despliegue de los ensamblajes necesarios. Pero, me sorprende escuchar que no usas el registro. ¿Usas un marco de registro diferente o haces tu propio rollo?