Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run Scan×
Skip to content
World desk9 min

Anatomía de un slice: handlers sin interfaces, EF Core sin repositorios y eventos desacoplados

Un slice organiza el código por funcionalidad, pero no obliga a usar MediatR, interfaces ni repositorios. Decide según las fronteras de ejecución, escritura y consistencia que realmente necesita cada caso de uso.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Un slice organiza el código alrededor de una funcionalidad concreta: la entrada delega en un handler específico y las piezas del caso de uso quedan próximas entre sí. No exige MediatR, interfaces para cada handler ni repositorios para cada tabla. La decisión útil es escoger, para cada frontera, la abstracción que resuelve una necesidad real: quién ejecuta el handler, quién controla las escrituras y qué garantías necesita la publicación de eventos.

Qué significa organizar una aplicación por slices

En una organización por tipo, los controladores, servicios, repositorios y modelos suelen quedar en carpetas separadas. Un slice invierte esa perspectiva: agrupa el código relacionado con una acción o funcionalidad para que el flujo de ese caso de uso sea más fácil de localizar. Un handler representa el trabajo de una acción concreta, mientras que la frontera de entrada —por ejemplo, un endpoint— le entrega la solicitud.

As an Amazon Associate I earn from qualifying purchases.

La guía de Microsoft Learn sobre desarrollo de aplicaciones ASP.NET Core presenta los feature slices como alternativa a organizar por tipos de archivo y describe handlers como una forma de separar el trabajo de cada acción. MediatR es una opción para enviar solicitudes a handlers, no un requisito del enfoque. Se pueden conservar los beneficios de organizar por funcionalidad sin incorporar esa biblioteca.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Una anatomía posible

  • Entrada: recibe la solicitud y se ocupa de la frontera HTTP, como la vinculación de datos y la respuesta.
  • Handler: coordina el caso de uso específico y recibe las dependencias que necesita.
  • Persistencia: el handler puede usar el DbContext directamente o una abstracción de repositorio, según la frontera que necesite proteger.
  • Eventos: si la operación produce un hecho relevante para otras partes, puede registrarse y atenderse dentro del proceso o comunicarse fuera de él mediante un evento de integración.

Esta es una forma de organizar responsabilidades, no una receta que obligue a que cada pieza exista siempre. Un slice pequeño puede no necesitar un servicio intermedio, un repositorio o un sistema de mensajería.

¿Un handler necesita implementar una interfaz?

No necesariamente. Una interfaz de handler resulta útil si el código que lo ejecuta depende de un contrato común, si se necesita sustituir implementaciones mediante ese contrato o si la arquitectura ha adoptado un mecanismo que descubre handlers por interfaz. Pero si un endpoint puede depender directamente de un handler concreto registrado en el contenedor de dependencias, añadir una interfaz por handler puede ser una capa adicional sin una necesidad clara.

Qué debe resolverse si se omite la interfaz

  • Descubrimiento y ejecución: debe quedar claro quién crea o resuelve el handler y cuándo se invoca. Sin MediatR ni otro despachador, la frontera de entrada puede invocar directamente el handler concreto; la aplicación debe registrar y resolver sus dependencias de forma coherente.
  • Dependencias: el constructor del handler debe hacer visible lo que necesita, como el contexto de datos o un servicio de dominio. Un handler específico puede recibir solo las dependencias de su caso de uso, en lugar de apoyarse en un objeto genérico con muchas responsabilidades.
  • Acoplamiento: el código que invoca directamente una clase conoce su tipo concreto. Un despachador y un contrato pueden reducir ese conocimiento en la frontera, pero agregan mecanismos y abstracciones que también hay que mantener.

La elección no demuestra por sí sola que una opción sea más fácil de probar o mantener. Lo importante es que el mecanismo de ejecución sea explícito y que la abstracción corresponda a una necesidad comprobable, no a la expectativa de que todo handler deba tener una interfaz.

¿Se puede usar EF Core sin repositorios?

Sí. La guía de Microsoft Learn sobre persistencia en la capa de infraestructura señala que los repositorios son opcionales y que DbContext proporciona capacidades de Repository y Unit of Work, incluido el seguimiento de cambios y la coordinación de escrituras mediante SaveChanges. Cuando el caso de uso puede expresar su operación con EF Core sin filtrar detalles de persistencia hacia el dominio, inyectar el contexto en el handler evita duplicar una capa que no añade una frontera útil.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Opción Cuándo encaja Coste o consideración
DbContext directo El caso de uso puede consultar y modificar los datos con EF Core, y no necesita aislar esa dependencia detrás de una regla propia. El handler depende de EF Core y debe mantener el acceso a persistencia en la capa apropiada de la aplicación.
Repositorio por agregado Se necesita hacer explícita la frontera de escritura de un agregado, proteger invariantes o aislar una dependencia de persistencia que conviene desacoplar. Añade una abstracción y código de adaptación; debe reflejar una necesidad del dominio o de la aplicación, no duplicar sin motivo la API del ORM.

Cuándo aporta valor un repositorio

En diseño guiado por dominio, un repositorio puede representar el acceso a un agregado raíz y ayudar a mantener sus invariantes bajo control. Es una frontera deliberada alrededor de una unidad de dominio, no una copia de cada tabla con métodos CRUD. La guía de Microsoft admite ese diseño, especialmente cuando los límites del agregado gobiernan las escrituras.

Las lecturas pueden tener necesidades distintas de las escrituras. En un diseño CQRS, es posible mantener lecturas separadas sin convertir cada consulta en un método de un repositorio de agregado. La estructura debe seguir las responsabilidades reales del caso de uso.

La arquitectura por capas no obliga a crear repositorios

La guía general de arquitecturas de aplicaciones web .NET sitúa el DbContext y las migraciones en Infrastructure, y el modelo y las interfaces de Application Core en el núcleo de la aplicación. Esa separación ayuda a decidir hacia dónde apuntan las dependencias, pero no impone que cada handler de un slice llegue a la base mediante un repositorio. Se puede mantener una arquitectura con capas claras sin agregar una abstracción redundante.

Cómo decidir qué probar

La abstracción de repositorio puede facilitar pruebas unitarias aisladas al permitir sustituir una dependencia, pero esa facilidad no significa que un simulacro valide el comportamiento real de EF Core o de la base de datos. La guía de Microsoft distingue las pruebas unitarias aisladas de las pruebas de integración que ejercitan la persistencia real.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Prueba la coordinación y las reglas del handler de forma aislada cuando el objetivo sea verificar esas decisiones y sus resultados.
  • Usa pruebas de integración cuando la afirmación dependa de consultas, seguimiento de cambios, transacciones o comportamiento específico de la persistencia.
  • Elige la estrategia de prueba según el comportamiento que se quiere comprobar; no añadas un repositorio solo para poder simularlo, ni supongas que una prueba unitaria sustituye la validación de integración.

Eventos de dominio y de integración no son intercambiables

Un evento de dominio expresa que algo ocurrió dentro del dominio y que otras partes de ese mismo dominio pueden necesitar atender. Suele despacharse dentro del proceso, y puede haber varios handlers para el mismo evento. Un evento de integración, en cambio, comunica una transacción confirmada a otro microservicio, bounded context o sistema externo; Microsoft describe esa comunicación como asíncrona.

Aspecto Evento de dominio Evento de integración
Alcance Partes interesadas del mismo dominio y proceso. Otros servicios, bounded contexts o sistemas externos.
Momento y propósito Reaccionar a un hecho del dominio dentro de la aplicación. Comunicar un hecho asociado a una transacción ya confirmada.
Forma de comunicación Normalmente despacho dentro del proceso; más de un handler puede atenderlo. Comunicación asíncrona entre sistemas.

Un evento en memoria no garantiza que un broker externo reciba el mensaje. Tampoco convierte por sí solo una escritura de base de datos y una publicación externa en una única operación atómica. Si el caso de uso necesita entrega fiable fuera del proceso, requiere una decisión adicional sobre cómo coordinar el commit y la publicación; no se debe atribuir esa garantía al simple despacho de un evento de dominio.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Despachar eventos antes o después de SaveChanges

El momento de despacho cambia tanto el límite transaccional como la forma de tratar fallos. Microsoft describe un enfoque diferido en el que el agregado acumula eventos y estos se despachan alrededor de SaveChanges. Para un EF Core relacional, el despacho previo al guardado es un punto de partida sencillo si los handlers comparten el mismo DbContext y deben participar en la misma transacción de persistencia.

Momento del despacho Qué permite Qué exige aceptar
Antes de guardar Los handlers que usan el mismo contexto pueden contribuir a los cambios guardados en una transacción relacional compartida. Si falla SaveChanges, esos cambios pueden revertirse juntos. Los handlers deben ser compatibles con ese límite transaccional y evitar tratar el evento como una notificación externa ya confirmada.
Después del commit Los handlers reaccionan una vez que la transacción principal se ha confirmado. El trabajo posterior está en una transacción separada. Hay que aceptar consistencia eventual y planear cómo detectar, reintentar o compensar fallos.

Si la reacción pertenece a la misma unidad de trabajo

Despacha antes de guardar cuando los handlers forman parte de la operación local y compartir el contexto y la transacción resulta apropiado. Así, los cambios relacionados pueden persistirse juntos. La afirmación depende de ese contexto relacional compartido: no se extiende automáticamente a llamadas HTTP, brokers ni otras acciones externas.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Si la reacción ocurre después de confirmar

El despacho posterior separa el commit de la reacción. Eso puede ser válido para una aplicación que tolera consistencia eventual, pero un fallo después de confirmar no deshace la transacción ya completada. El diseño necesita una respuesta a ese fallo —por ejemplo, detectar la operación pendiente, reintentarla o compensarla— conforme a sus requisitos. No hay una garantía de entrega exactamente una vez implícita en los eventos en memoria.

Cómo combinar las decisiones en un slice

  1. Define la acción: delimita qué solicitud atiende el slice y qué resultado devuelve, antes de elegir una biblioteca o una jerarquía de clases.
  2. Elige la ejecución: usa un despachador si quieres ese contrato de envío y descubrimiento; si no, la frontera de entrada puede resolver e invocar un handler concreto con sus dependencias registradas.
  3. Marca la frontera de escritura: empieza con DbContext directo cuando sea suficiente para el caso de uso. Introduce un repositorio por agregado cuando aporte protección de invariantes o un aislamiento deliberado.
  4. Separa los eventos por alcance: usa eventos de dominio para reacciones internas y eventos de integración para comunicar transacciones confirmadas fuera del proceso.
  5. Escoge el momento de despacho: decide si la reacción pertenece a la unidad de trabajo compartida o si puede ejecutarse tras el commit con consistencia eventual y tratamiento de fallos.
  6. Alinea las pruebas: verifica reglas aisladas de manera unitaria y valida integración con persistencia cuando la afirmación dependa de EF Core o de la base real.

Qué no se puede concluir solo por elegir estos patrones

La combinación de slices, handlers sin interfaz, EF Core directo y eventos desacoplados no implica por sí misma una mejora medida de rendimiento, productividad o tasa de defectos. Tampoco demuestra que una aplicación concreta haya sido desplegada con éxito usando esas decisiones. Son opciones de diseño cuyos beneficios y costes dependen de los límites del dominio, el comportamiento transaccional requerido y la complejidad que el equipo está dispuesto a operar.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.