[{"data":1,"prerenderedAt":234},["ShallowReactive",2],{"term-r\u002Frepository-pattern":3,"related-r\u002Frepository-pattern":220},{"id":4,"title":5,"acronym":6,"body":7,"category":201,"description":202,"difficulty":203,"extension":204,"letter":205,"meta":206,"navigation":207,"path":208,"related":209,"seo":214,"sitemap":215,"stem":218,"subcategory":6,"__hash__":219},"terms\u002Fterms\u002Fr\u002Frepository-pattern.md","Repository Pattern",null,{"type":8,"value":9,"toc":195},"minimark",[10,15,19,23,26,30,184,188,191],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Repository Pattern puts a layer between your business logic and your database, so your business code never writes SQL directly. It's like having a librarian — you ask for 'all users over 30' and the librarian goes and finds them. You don't care how the books are organized.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"The Repository pattern mediates between the domain and data mapping layers, acting like an in-memory collection of domain objects. It centralizes data access logic, providing a clean API for querying and persisting domain objects while hiding database implementation details.",[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","interface UserRepository {\n  findById(id: string): Promise\u003CUser | null>;\n  findByEmail(email: string): Promise\u003CUser | null>;\n  save(user: User): Promise\u003CUser>;\n  delete(id: string): Promise\u003Cvoid>;\n}\n","typescript","",[38,39,40,57,98,127,153,178],"code",{"__ignoreMap":36},[41,42,45,49,53],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"spNyl","interface",[41,50,52],{"class":51},"sBMFI"," UserRepository",[41,54,56],{"class":55},"sMK4o"," {\n",[41,58,60,64,67,71,74,77,80,83,86,89,92,95],{"class":43,"line":59},2,[41,61,63],{"class":62},"swJcz","  findById",[41,65,66],{"class":55},"(",[41,68,70],{"class":69},"sHdIc","id",[41,72,73],{"class":55},":",[41,75,76],{"class":51}," string",[41,78,79],{"class":55},"):",[41,81,82],{"class":51}," Promise",[41,84,85],{"class":55},"\u003C",[41,87,88],{"class":51},"User",[41,90,91],{"class":55}," |",[41,93,94],{"class":51}," null",[41,96,97],{"class":55},">;\n",[41,99,101,104,106,109,111,113,115,117,119,121,123,125],{"class":43,"line":100},3,[41,102,103],{"class":62},"  findByEmail",[41,105,66],{"class":55},[41,107,108],{"class":69},"email",[41,110,73],{"class":55},[41,112,76],{"class":51},[41,114,79],{"class":55},[41,116,82],{"class":51},[41,118,85],{"class":55},[41,120,88],{"class":51},[41,122,91],{"class":55},[41,124,94],{"class":51},[41,126,97],{"class":55},[41,128,130,133,135,138,140,143,145,147,149,151],{"class":43,"line":129},4,[41,131,132],{"class":62},"  save",[41,134,66],{"class":55},[41,136,137],{"class":69},"user",[41,139,73],{"class":55},[41,141,142],{"class":51}," User",[41,144,79],{"class":55},[41,146,82],{"class":51},[41,148,85],{"class":55},[41,150,88],{"class":51},[41,152,97],{"class":55},[41,154,156,159,161,163,165,167,169,171,173,176],{"class":43,"line":155},5,[41,157,158],{"class":62},"  delete",[41,160,66],{"class":55},[41,162,70],{"class":69},[41,164,73],{"class":55},[41,166,76],{"class":51},[41,168,79],{"class":55},[41,170,82],{"class":51},[41,172,85],{"class":55},[41,174,175],{"class":51},"void",[41,177,97],{"class":55},[41,179,181],{"class":43,"line":180},6,[41,182,183],{"class":55},"}\n",[11,185,187],{"id":186},"when-youll-hear-this","When You'll Hear This",[16,189,190],{},"\"Business logic should go through the repository, not raw SQL.\" \u002F \"The repository pattern makes switching databases trivial.\"",[192,193,194],"style",{},"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":59,"depth":59,"links":196},[197,198,199,200],{"id":13,"depth":59,"text":14},{"id":21,"depth":59,"text":22},{"id":28,"depth":59,"text":29},{"id":186,"depth":59,"text":187},"architecture","Repository Pattern puts a layer between your business logic and your database, so your business code never writes SQL directly.","intermediate","md","r",{},true,"\u002Fterms\u002Fr\u002Frepository-pattern",[210,211,212,213],"Design Pattern","Hexagonal Architecture","Clean Architecture","Dependency Injection",{"title":5,"description":202},{"changefreq":216,"priority":217},"weekly",0.7,"terms\u002Fr\u002Frepository-pattern","50RrHm--FroDN3f1TEITcJZma0SwGA22s2aUaaG-OOQ",[221,225,228,231],{"title":212,"path":222,"acronym":6,"category":201,"difficulty":223,"description":224},"\u002Fterms\u002Fc\u002Fclean-architecture","advanced","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":213,"path":226,"acronym":6,"category":201,"difficulty":203,"description":227},"\u002Fterms\u002Fd\u002Fdependency-injection","Instead of your UserService creating its own DatabaseConnection (tight coupling), you pass the database in from outside: new UserService(db).",{"title":210,"path":229,"acronym":6,"category":201,"difficulty":203,"description":230},"\u002Fterms\u002Fd\u002Fdesign-pattern","Design patterns are like recipe cards for solving common coding problems.",{"title":211,"path":232,"acronym":6,"category":201,"difficulty":223,"description":233},"\u002Fterms\u002Fh\u002Fhexagonal-architecture","Hexagonal Architecture (aka Ports and Adapters) treats your app like a USB hub.",1776518307744]