[{"data":1,"prerenderedAt":249},["ShallowReactive",2],{"term-c\u002Fclean-architecture":3,"related-c\u002Fclean-architecture":234},{"id":4,"title":5,"acronym":6,"body":7,"category":215,"description":216,"difficulty":217,"extension":218,"letter":219,"meta":220,"navigation":221,"path":222,"related":223,"seo":228,"sitemap":229,"stem":232,"subcategory":6,"__hash__":233},"terms\u002Fterms\u002Fc\u002Fclean-architecture.md","Clean Architecture",null,{"type":8,"value":9,"toc":209},"minimark",[10,15,19,23,26,30,198,202,205],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Clean Architecture is like an onion with strict rules: the inner layers (your core business logic) have absolutely no idea the outer layers (databases, APIs, UI) even exist. This means you can swap your database from Postgres to MongoDB and your business logic doesn't care at all.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Clean Architecture (by Robert C. Martin) organizes code into concentric layers: Entities (enterprise business rules), Use Cases (application business rules), Interface Adapters, and Frameworks\u002FDrivers. The Dependency Rule states all dependencies must point inward — inner layers know nothing about outer layers.",[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 Use Case (inner layer - no framework deps)\nclass CreateUserUseCase {\n  constructor(private userRepository: IUserRepository) {}\n  async execute(data: CreateUserDTO): Promise\u003CUser> {\n    const user = new User(data);\n    return this.userRepository.save(user);\n  }\n}\n","typescript","",[38,39,40,49,64,92,129,158,186,192],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Use Case (inner layer - no framework deps)\n",[41,50,52,56,60],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","class",[41,57,59],{"class":58},"sBMFI"," CreateUserUseCase",[41,61,63],{"class":62},"sMK4o"," {\n",[41,65,67,70,73,76,80,83,86,89],{"class":43,"line":66},3,[41,68,69],{"class":54},"  constructor",[41,71,72],{"class":62},"(",[41,74,75],{"class":54},"private",[41,77,79],{"class":78},"sHdIc"," userRepository",[41,81,82],{"class":62},":",[41,84,85],{"class":58}," IUserRepository",[41,87,88],{"class":62},")",[41,90,91],{"class":62}," {}\n",[41,93,95,98,102,104,107,109,112,115,118,121,124,127],{"class":43,"line":94},4,[41,96,97],{"class":54},"  async",[41,99,101],{"class":100},"swJcz"," execute",[41,103,72],{"class":62},[41,105,106],{"class":78},"data",[41,108,82],{"class":62},[41,110,111],{"class":58}," CreateUserDTO",[41,113,114],{"class":62},"):",[41,116,117],{"class":58}," Promise",[41,119,120],{"class":62},"\u003C",[41,122,123],{"class":58},"User",[41,125,126],{"class":62},">",[41,128,63],{"class":62},[41,130,132,135,139,142,145,149,151,153,155],{"class":43,"line":131},5,[41,133,134],{"class":54},"    const",[41,136,138],{"class":137},"sTEyZ"," user",[41,140,141],{"class":62}," =",[41,143,144],{"class":62}," new",[41,146,148],{"class":147},"s2Zo4"," User",[41,150,72],{"class":100},[41,152,106],{"class":137},[41,154,88],{"class":100},[41,156,157],{"class":62},";\n",[41,159,161,165,168,171,174,177,179,182,184],{"class":43,"line":160},6,[41,162,164],{"class":163},"s7zQu","    return",[41,166,167],{"class":62}," this.",[41,169,170],{"class":137},"userRepository",[41,172,173],{"class":62},".",[41,175,176],{"class":147},"save",[41,178,72],{"class":100},[41,180,181],{"class":137},"user",[41,183,88],{"class":100},[41,185,157],{"class":62},[41,187,189],{"class":43,"line":188},7,[41,190,191],{"class":62},"  }\n",[41,193,195],{"class":43,"line":194},8,[41,196,197],{"class":62},"}\n",[11,199,201],{"id":200},"when-youll-hear-this","When You'll Hear This",[16,203,204],{},"\"Clean Architecture makes our business logic framework-agnostic.\" \u002F \"The use cases layer shouldn't import from Express.\"",[206,207,208],"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 .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 pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--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":210},[211,212,213,214],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":200,"depth":51,"text":201},"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...","advanced","md","c",{},true,"\u002Fterms\u002Fc\u002Fclean-architecture",[224,225,226,227],"Hexagonal Architecture","Domain-Driven Design","Dependency Inversion","SOLID",{"title":5,"description":216},{"changefreq":230,"priority":231},"weekly",0.7,"terms\u002Fc\u002Fclean-architecture","ia5iMT1lyJzgN5IHZzFYXgqaR339M56eIcqOVVYp6GM",[235,239,243,246],{"title":226,"path":236,"acronym":6,"category":215,"difficulty":237,"description":238},"\u002Fterms\u002Fd\u002Fdependency-inversion","intermediate","Dependency Inversion says high-level code shouldn't depend on low-level code — both should depend on abstractions.",{"title":225,"path":240,"acronym":241,"category":215,"difficulty":217,"description":242},"\u002Fterms\u002Fd\u002Fdomain-driven-design","DDD","DDD says your code should speak the same language as the business.",{"title":224,"path":244,"acronym":6,"category":215,"difficulty":217,"description":245},"\u002Fterms\u002Fh\u002Fhexagonal-architecture","Hexagonal Architecture (aka Ports and Adapters) treats your app like a USB hub.",{"title":227,"path":247,"acronym":227,"category":215,"difficulty":237,"description":248},"\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.",1776518265510]