Hace poco me topé con un post en el que enumeraba las librerias y herramientas más interesantes para desarrollo con .NET y tenia ya ganas de crear mi propia lista de librerias recomendables para .NET. Esta lista de librerías son sólo un conjunto de las que, o bien más utilizo o he utilizado y las que creo, bajo mi punto de vista, que todo desarrollador debería, como mínimo conocer.
Dicho esto, a continuación detallo estas diez + dos librerías esperando vuestra opinión y feedback tanto para las que expongo como para las tantas otras que me he dejado en el tintero (la lista, afortunadamente, es cada vez más grande). Espero que os resulte útil:
Collections/Generics
PowerCollections - Es una libreria de colecciones genéricas complementarias a la que proporciona el CLR de .NET Framework desarrollada por Intellect las cuales conocí en el libro "CLR via C# 4.0" de Jeffrey Richter. Algunas de las clases que proporciona son Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary, Set, OrderedSet u OrderedMultiDictionary, además de las que extienden las que el propio CLR proporciona.
Dependency Injection/Inversion of Control
StructureMap - Además de StructureMap, Castle Windsor o Unity son otras de las librerias IoC que he utilizado. El motivo del uso de StructureMap fue quizás la mayor facilidad de uso [Opinión Personal] respecto a otras. De cualquier forma, en este punto es más importante el beneficio de la Inyección de Dependencias que el propio framework. StructureMap fue inicialmente desarrollada y mantenida por by Jeremy D. Miller, The Shade Tree Developer y Joshua Flanagan.
Design by Contract
Microsoft Code Contracts: Code Contracts facilita la adopción de la programación por contratos de forma agnostica al lenguaje mediante precondiciones, poscondiciones e invariantes. Esta bajo licencia Microsoft Research License Agreement.
Logging
Log4Net - Desde que conocí Log4net, despues de una -muy mala, malísima vamos- experiencia con otro tipo de librerias, tambien Open Source, me parece la apuesta más facil y eficaz para el logging de aplicaciones. Log4net forma parte del proyecto Apache Logging Services.
ORM
NHibernate/FluentNHibernate: No tengo mucha experiencia en este campo pero por lo poco que he tocado y por la experiencia, todas las librerias que surgen de la comunidad como necesidad acaban convirtiendose en un must-have, o must-use en este caso. Cabe decir que tampoco he mirado alternativas. NHibernate no es mas que la adaptación a .NET de la famosa libreria ORM para Java. FluentNHiberante facilita el, a veces, tedioso mapeo de entidades y objetos a través de los archivos hbm.xml. FluentNHibernate se define como una libreria XML-less ya que permite todo este mapeo a través de código.
No-SQL Database
MongoDB: Se trata de una de las bases de datos No-SQL más extendidas y pese a que no es una librería en sí, el conocimiento de sus posibilidades, sus pros y sus contras es obligatorio. Su modelo de datos por documentos está basado en JSON y BSON y por tanto es schema-less. Es una alternativa a las bases de datos relacionales gracias a la escalabilidad horizontal que proporcionan este tipo de herramientas. Está bajo Free Software Foundation's GNU AGPL v3.0.
Unit Testing/Mocking/BDD
NUnit: Inicialmente basada en la libreria JUnit de Java, NUnit 2.5 es la sexta versión basda en xUnit. Está escrita en C# y fue totalmente rediseñada para sacar el máximo provecho a la plataforma .NET. Se integra estupendamente tanto con las MS Test Tools como con Resharper 5.x.
Moq: Muy útil especialmente para desarrolladores sin un gran bagaje en Mocking. Ofrece soporte a muchas de las características de .NET como LINQ Trees Expressions o expresiones lambda y se caracteriza por su facilidad de uso y su forma natural de escrbir stubs y mocks.
BDD specflow: Distribuida bajo licencia BSD e inspirada en Cucumber y su comunidad, esta libreria abarca las diferentes posibilidades del desarrollo orientado a comportamiento o BDD y resalta, entre otros, su uso con aplicaciones ASP.NET MVC.
Framework
nServiceBus: Framework de comunicaciones para arquitecturas SOA distribuidas, nServiceBus es un proyecto que surge de la necesidad en base a la experiencia personal de Udi Dahan, precursor y principal coordinador del proyecto. Recientemente ha incorporado nueva política de licencias y se anunció, y así hicimos en Genbeta dev, las novedades que traerá incorporada en la proxima versión 3.0.
Otras
Añado estas dos librerias por recomendación de un buen amigo y con las que todavia no he tenido la oportunidad de trabajar pero que estan haciéndose un hueco importante entre la comunidad de desarrolladores. Se trata de:
Elmah: ELMAH (Error Logging Modules and Handlers), es una libreria de logging específicamente desarrolada para aplicaciones ASP.NET y es especialmente útil para el registro de errores en Modulos y Manejadores de ASP.NET MVC.
NuGet: Otra de las librerias Open Source hospedada en Codeplex y miembro de la ASP.NET Gallery. Su intención es la de facilitar la integración y despliegue de librerias de terceros a los desarrollos .NET, evitando el tedioso proceso de referenciación y modificación de referencias en el app.config.