[{"data":1,"prerenderedAt":244},["ShallowReactive",2],{"page-\u002Fv1\u002Fcore\u002Fphilosophy":3},{"id":4,"title":5,"body":6,"description":236,"extension":237,"meta":238,"navigation":239,"path":240,"seo":241,"stem":242,"__hash__":243},"content\u002Fv1\u002Fcore\u002Fphilosophy.md","Philosophy",{"type":7,"value":8,"toc":227},"minimark",[9,13,30,35,77,84,88,92,95,99,130,134,194,198,205,208,219],[10,11,5],"h1",{"id":12},"philosophy",[14,15,16,17,21,22,25,26,29],"p",{},"The primary goal is to decouple ",[18,19,20],"strong",{},"business logic (the Domain)"," from ",[18,23,24],{},"technical implementation (Infrastructure and UI)",", while keeping each bounded context ",[18,27,28],{},"independently replaceable",".",[31,32,34],"h2",{"id":33},"three-pillars","Three pillars",[36,37,38,45,63],"ol",{},[39,40,41,44],"li",{},[18,42,43],{},"Domain-centricity"," — Business rules stay pure. Domain code carries zero dependencies on a host framework, database driver, or third-party SDK.",[39,46,47,50,51,55,56,55,59,62],{},[18,48,49],{},"Modularity (bounded contexts)"," — The application is divided into independent modules (e.g. ",[52,53,54],"code",{},"Ordering",", ",[52,57,58],{},"Warehouse",[52,60,61],{},"Directory","). Each module is a self-contained unit with its own Application, Domain, Infrastructure, and UI.",[39,64,65,68,69,72,73,76],{},[18,66,67],{},"Dependency inversion"," — The Domain defines ",[18,70,71],{},"ports"," (interfaces); Infrastructure provides ",[18,74,75],{},"adapters"," (implementations). Application orchestrates; it never reaches past a port into a concrete driver.",[14,78,79,80,83],{},"The ",[18,81,82],{},"composition root"," binds each Domain port to an Infrastructure adapter. Domain never imports the host container API. How that wiring is expressed is a host detail — still no business rules in the composition root.",[85,86],"host-examples",{"topic":87},"composition",[31,89,91],{"id":90},"hexagonal-architecture-in-one-sentence","Hexagonal Architecture in one sentence",[14,93,94],{},"Use Cases talk to the outside world only through ports. Adapters implement those ports for databases, HTTP peers, queues, clocks, and UI delivery mechanisms.",[31,96,98],{"id":97},"domain-driven-design-in-this-standard","Domain-Driven Design in this standard",[100,101,102,108,114,120],"ul",{},[39,103,104,107],{},[18,105,106],{},"Entities \u002F value objects \u002F domain services"," express invariants inside a module.",[39,109,110,113],{},[18,111,112],{},"Application Use Cases"," orchestrate a single user intention.",[39,115,116,119],{},[18,117,118],{},"Bounded contexts"," are module boundaries — not namespace cosmetics.",[39,121,122,125,126,129],{},[18,123,124],{},"Anti-Corruption Layers"," and ",[18,127,128],{},"Domain Events"," are the only sanctioned bridges between modules.",[31,131,133],{"id":132},"what-core-is-not","What Core is not",[135,136,137,150],"table",{},[138,139,140],"thead",{},[141,142,143,147],"tr",{},[144,145,146],"th",{},"Not Core",[144,148,149],{},"Where it belongs",[151,152,153,162,170,178,186],"tbody",{},[141,154,155,159],{},[156,157,158],"td",{},"ORM models, query builders",[156,160,161],{},"Adapter → persistence",[141,163,164,167],{},[156,165,166],{},"Framework service providers \u002F DI container APIs",[156,168,169],{},"Adapter → composition root",[141,171,172,175],{},[156,173,174],{},"Admin panel widgets",[156,176,177],{},"Adapter → UI",[141,179,180,183],{},[156,181,182],{},"Linters, arch-test runners, generators",[156,184,185],{},"Adapter → tooling",[141,187,188,191],{},[156,189,190],{},"Product feature catalogs",[156,192,193],{},"Your application roadmap",[31,195,197],{"id":196},"replaceability-is-the-product","Replaceability is the product",[14,199,200,201,204],{},"A module that can only work when another module’s Domain is on the classpath is ",[18,202,203],{},"not"," modular — it is a distributed monolith with folders.",[14,206,207],{},"Core optimizes for this outcome:",[100,209,210,213,216],{},[39,211,212],{},"Extract a module into an internal package later.",[39,214,215],{},"Replace a peer with an HTTP API without rewriting Use Cases.",[39,217,218],{},"Swap persistence drivers behind the same repository port.",[14,220,221,222,29],{},"Continue with ",[223,224,226],"a",{"href":225},"\u002Fv1\u002Fcore\u002Fmodule-layout","module layout",{"title":228,"searchDepth":229,"depth":229,"links":230},"",2,[231,232,233,234,235],{"id":33,"depth":229,"text":34},{"id":90,"depth":229,"text":91},{"id":97,"depth":229,"text":98},{"id":132,"depth":229,"text":133},{"id":196,"depth":229,"text":197},"Domain-centric Modular Hexagonal DDD — ports, adapters, and replaceable bounded contexts.","md",{},true,"\u002Fv1\u002Fcore\u002Fphilosophy",{"title":5,"description":236},"v1\u002Fcore\u002Fphilosophy","dxxIWFP17pIEy2h5eQmcRgUG-nN5cIKbkus6mIju1qI",1786241411390]