📝 Your daily dose of .NET is here! Issue #339 covers why EF Core 10 might be the biggest upgrade ever 🚀, harnessing the Specification Pattern in EF Core to clean up queries 🛠️, how to detect Blocking Calls in ASP. NET Core 🚫, and the Hidden Bugs Behind async/await that no one warns you about 💡. Sharpen your architecture and performance skills today! 👇
dotnetnews.co/archive/the-ne…#dotnet#csharp#efcore#asyncawait#performance#specificationpattern#architecture
📝 Your daily dose of .NET is here! Issue #324 covers a Clean Architecture starter template for .NET 9 🏗️, how One Header Can Make Your API 30% Faster ⚡, mastering the Specification Pattern with EF Core 8 🔎, and Zero Downtime Deployment strategies for ASP . NET Core 🔄. Hey there fellow dev—keep pushing for architectural and performance excellence! 👇
dotnetnews.co/archive/the-ne…#dotnet#csharp#cleanarchitecture#performance#specificationpattern#deployment
🚀 Specification Pattern en .NET
El Specification Pattern es un patrón de diseño orientado a encapsular una logica de negocio, que luego puede ser utilizada multiples veces dentro del proyecto .NET
⚡ Su uso más común en .NET es para consultas en EF Core, donde creas un componente de tipo CRITERIA que luego puede aplicarse directamente a tus queries, manteniendo el código más ordenado y expresivo.
🤔 ¿Por qué es importante?
Porque transforma las consultas en objetos de primera clase, haciendo la vida del developer más sencilla y manteniendo el código limpio, mantenible y escalable en sistemas grandes y complejos.
✨ Sus principales beneficios:
🔹 Reutilización de lógica de consultas
🔹 Separación de responsabilidades (SRP)
🔹 Composición flexible (combinar specs fácilmente)
🔹 Testabilidad de reglas de negocio
🔹 Extensible con librerías como Ardalis.Specification
En resumen, Specification Pattern = más orden, más mantenibilidad y más claridad en tus proyectos .NET 🙌
👉 ¿Ya lo usas en tus proyectos o prefieres quedarte solo con EF Core y sus consultas directas?
Aqui te explico paso a paso como implementar el pattern Specificacion, siguiendo el ejemplo de la imagen:
1️⃣ 🧩 Interfaz de especificación
Define un contrato con una propiedad Criteria que representa la condición de filtrado.
2️⃣ 🏗️ Clase concreta
DeviceByNameSpecification implementa la interfaz y encapsula la regla: “el nombre del dispositivo contiene el texto buscado”.
3️⃣ 🎯 Instanciación de la especificación
Se crea un objeto pasando "iPhone" como criterio.
4️⃣ 🔗 Uso en la consulta EF Core
El spec.Criteria se aplica en el Where, manteniendo el código limpio y reutilizable.
5️⃣ 🗄️ Traducción automática
EF Core convierte la expresión en SQL (LIKE '%iPhone%') y filtra en la base de datos.
6️⃣ 📥 Obtención de resultados
ToListAsync() ejecuta la query y devuelve la lista de dispositivos que cumplen la condición.
#dotnet#efcore#DDD#CleanArchitecture#SpecificationPattern
🚀 Wow, acabo de ver un debate muy interesante en redes sobre Specification Pattern vs Repository Pattern.
Desde mi punto de vista, no son patrones excluyentes… ¡al contrario, funcionan muy bien juntos! 🔗✨
🔹 Varios developers con experiencia señalan que Repository ya está incluido en EF Core, y es cierto.
🔹 En cuanto a Specification Pattern, no viene nativo en EF Core, pero puedes reutilizar consultas con métodos de extensión y expresiones, o usar el paquete NuGet Ardalis.Specification para un enfoque más completo (Where / Include / Order / Paging).
💡 Estoy pensando en preparar un post más profundo con ejemplos prácticos sobre este tema.
👉 ¿Les interesa?
Y dime, ¿tú qué prefieres usar en tus proyectos?
Vaxi.Drez
#dotnet#csharp#efcore#entityframework#DDD#DomainDrivenDesign#CleanArchitecture#SoftwareArchitecture#DesignPatterns#RepositoryPattern#SpecificationPattern#Developers
„The idea of Spring Data’s #Specification originates in the #SpecificationPattern. The pattern was developed by Eric Evans and was later refined together with Martin Fowler.“
I think #laravel tried something similar w/ #scopes but more as a hard-to-test-trait-approach? 🤔
A few weeks ago, I learned about Spring Data's Specifications and could successfully use them in one of my projects. In my latest blog post, I wrote about what I learned. jschmitz.dev/posts/how_to_us…