0001 — DDD estricto con un Core puro
Contexto
Esta aplicación mueve dinero real. Las reglas de negocio esparcidas en puntos finales, servicios de fondo y componentes Razor se pudren en un comportamiento no comprobable e inconsistente — exactamente donde un error cuesta a un usuario capital.
Decisión
La lógica de dominio vive en agregados, objetos de valor y servicios de dominio en src/Core, que
se compila con cero dependencias de infraestructura (sin EF, HttpClient, Docker o ASP.NET). Los puntos finales,
herramientas MCP, componentes y BackgroundServices orquestan — nunca deciden. Reglas:
- Sin setters públicos; cambios de estado a través de métodos que revelan la intención que protegen invariantes.
- Los agregados se hacen referencia entre sí por ID fuerte, nunca propiedad de navegación.
- Una
SaveChangesmuta un agregado; los flujos entre agregados utilizan eventos de dominio. - Los primitivos que cruzan un límite de dominio se envuelven en objetos de valor.
- Las violaciones invariantes lanzan una
DomainExceptionde Core, no una excepción de framework.
Consecuencias
- Las reglas de dominio son comprobables por unidad sin una base de datos o un host web.
- La pureza de
Corees aplicada por máquina porArchitectureGuardTestsy fallaría la compilación si se rompiera. - Hay más ceremonia (objetos de valor, IDs fuertes, eventos de dominio) que un modelo anémico — este es el costo deliberado de mantener las reglas de movimiento de dinero correctas y en un solo lugar.