[{"data":1,"prerenderedAt":274},["ShallowReactive",2],{"term-h\u002Fhexagonal-architecture":3,"related-h\u002Fhexagonal-architecture":260},{"id":4,"title":5,"acronym":6,"body":7,"category":242,"description":243,"difficulty":244,"extension":245,"letter":246,"meta":247,"navigation":142,"path":248,"related":249,"seo":254,"sitemap":255,"stem":258,"subcategory":6,"__hash__":259},"terms\u002Fterms\u002Fh\u002Fhexagonal-architecture.md","Hexagonal Architecture",null,{"type":8,"value":9,"toc":236},"minimark",[10,15,19,23,26,30,225,229,232],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Hexagonal Architecture (aka Ports and Adapters) treats your app like a USB hub. Your business logic sits in the middle, and everything else (databases, APIs, UIs) plugs in through standardized ports. Want to switch from MySQL to Postgres? Just swap the adapter — the core never changes.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Hexagonal Architecture (Alistair Cockburn) isolates the application core from external systems using Ports (interfaces defining how the core communicates) and Adapters (implementations that translate external systems to the core's ports). Enables testability and infrastructure independence.",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Port (interface)\ninterface UserRepository {\n  findById(id: string): Promise\u003CUser | null>;\n  save(user: User): Promise\u003CUser>;\n}\n\n\u002F\u002F Adapter (implementation)\nclass PostgresUserRepository implements UserRepository {\n  async findById(id: string) { \u002F* SQL query *\u002F }\n  async save(user: User) { \u002F* SQL insert *\u002F }\n}\n","typescript","",[38,39,40,49,64,105,131,137,144,150,166,195,220],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Port (interface)\n",[41,50,52,56,60],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","interface",[41,57,59],{"class":58},"sBMFI"," UserRepository",[41,61,63],{"class":62},"sMK4o"," {\n",[41,65,67,71,74,78,81,84,87,90,93,96,99,102],{"class":43,"line":66},3,[41,68,70],{"class":69},"swJcz","  findById",[41,72,73],{"class":62},"(",[41,75,77],{"class":76},"sHdIc","id",[41,79,80],{"class":62},":",[41,82,83],{"class":58}," string",[41,85,86],{"class":62},"):",[41,88,89],{"class":58}," Promise",[41,91,92],{"class":62},"\u003C",[41,94,95],{"class":58},"User",[41,97,98],{"class":62}," |",[41,100,101],{"class":58}," null",[41,103,104],{"class":62},">;\n",[41,106,108,111,113,116,118,121,123,125,127,129],{"class":43,"line":107},4,[41,109,110],{"class":69},"  save",[41,112,73],{"class":62},[41,114,115],{"class":76},"user",[41,117,80],{"class":62},[41,119,120],{"class":58}," User",[41,122,86],{"class":62},[41,124,89],{"class":58},[41,126,92],{"class":62},[41,128,95],{"class":58},[41,130,104],{"class":62},[41,132,134],{"class":43,"line":133},5,[41,135,136],{"class":62},"}\n",[41,138,140],{"class":43,"line":139},6,[41,141,143],{"emptyLinePlaceholder":142},true,"\n",[41,145,147],{"class":43,"line":146},7,[41,148,149],{"class":47},"\u002F\u002F Adapter (implementation)\n",[41,151,153,156,159,162,164],{"class":43,"line":152},8,[41,154,155],{"class":54},"class",[41,157,158],{"class":58}," PostgresUserRepository",[41,160,161],{"class":54}," implements",[41,163,59],{"class":58},[41,165,63],{"class":62},[41,167,169,172,175,177,179,181,183,186,189,192],{"class":43,"line":168},9,[41,170,171],{"class":54},"  async",[41,173,174],{"class":69}," findById",[41,176,73],{"class":62},[41,178,77],{"class":76},[41,180,80],{"class":62},[41,182,83],{"class":58},[41,184,185],{"class":62},")",[41,187,188],{"class":62}," {",[41,190,191],{"class":47}," \u002F* SQL query *\u002F",[41,193,194],{"class":62}," }\n",[41,196,198,200,203,205,207,209,211,213,215,218],{"class":43,"line":197},10,[41,199,171],{"class":54},[41,201,202],{"class":69}," save",[41,204,73],{"class":62},[41,206,115],{"class":76},[41,208,80],{"class":62},[41,210,120],{"class":58},[41,212,185],{"class":62},[41,214,188],{"class":62},[41,216,217],{"class":47}," \u002F* SQL insert *\u002F",[41,219,194],{"class":62},[41,221,223],{"class":43,"line":222},11,[41,224,136],{"class":62},[11,226,228],{"id":227},"when-youll-hear-this","When You'll Hear This",[16,230,231],{},"\"Hexagonal Architecture made switching from REST to GraphQL painless.\" \u002F \"The port defines the contract, the adapter does the work.\"",[233,234,235],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":51,"depth":51,"links":237},[238,239,240,241],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":227,"depth":51,"text":228},"architecture","Hexagonal Architecture (aka Ports and Adapters) treats your app like a USB hub.","advanced","md","h",{},"\u002Fterms\u002Fh\u002Fhexagonal-architecture",[250,251,252,253],"Clean Architecture","Dependency Inversion","Repository Pattern","SOLID",{"title":5,"description":243},{"changefreq":256,"priority":257},"weekly",0.7,"terms\u002Fh\u002Fhexagonal-architecture","qEuLsPPw_PdOBdDPqoKFOkgx2WAOHKSiJaErYpMX6e4",[261,264,268,271],{"title":250,"path":262,"acronym":6,"category":242,"difficulty":244,"description":263},"\u002Fterms\u002Fc\u002Fclean-architecture","Clean Architecture is like an onion with strict rules: the inner layers (your core business logic) have absolutely no idea the outer layers (databases, API...",{"title":251,"path":265,"acronym":6,"category":242,"difficulty":266,"description":267},"\u002Fterms\u002Fd\u002Fdependency-inversion","intermediate","Dependency Inversion says high-level code shouldn't depend on low-level code — both should depend on abstractions.",{"title":252,"path":269,"acronym":6,"category":242,"difficulty":266,"description":270},"\u002Fterms\u002Fr\u002Frepository-pattern","Repository Pattern puts a layer between your business logic and your database, so your business code never writes SQL directly.",{"title":253,"path":272,"acronym":253,"category":242,"difficulty":266,"description":273},"\u002Fterms\u002Fs\u002Fsolid","SOLID is five rules for writing code that doesn't turn into a nightmare over time. Each letter stands for a different rule.",1776518287019]