[{"data":1,"prerenderedAt":266},["ShallowReactive",2],{"term-c\u002Fcomposition":3,"related-c\u002Fcomposition":252},{"id":4,"title":5,"acronym":6,"body":7,"category":234,"description":235,"difficulty":236,"extension":237,"letter":238,"meta":239,"navigation":151,"path":240,"related":241,"seo":246,"sitemap":247,"stem":250,"subcategory":6,"__hash__":251},"terms\u002Fterms\u002Fc\u002Fcomposition.md","Composition",null,{"type":8,"value":9,"toc":228},"minimark",[10,15,19,23,26,30,217,221,224],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Composition means building complex things by combining simple ones, rather than inheriting from a parent class. Instead of 'Car extends Vehicle extends Machine', you have 'Car has an Engine, has Wheels, has a Stereo'. Lego bricks, not Russian nesting dolls.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Composition is an OOP design approach where complex behavior is achieved by combining objects rather than through inheritance chains. 'Favor composition over inheritance' (GoF) promotes flexibility since composed objects can be swapped at runtime and avoids the fragile base class problem.",[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 Composition over inheritance\nclass Logger { log(msg: string) { console.log(msg); } }\nclass Validator { validate(data: unknown) { \u002F* ... *\u002F } }\n\nclass UserService {\n  private logger = new Logger();\n  private validator = new Validator();\n  \u002F\u002F uses both without inheriting from either\n}\n","typescript","",[38,39,40,49,112,146,153,164,187,205,211],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Composition over inheritance\n",[41,50,52,56,60,64,68,71,75,78,81,84,86,90,93,97,99,101,103,106,109],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","class",[41,57,59],{"class":58},"sBMFI"," Logger",[41,61,63],{"class":62},"sMK4o"," {",[41,65,67],{"class":66},"swJcz"," log",[41,69,70],{"class":62},"(",[41,72,74],{"class":73},"sHdIc","msg",[41,76,77],{"class":62},":",[41,79,80],{"class":58}," string",[41,82,83],{"class":62},")",[41,85,63],{"class":62},[41,87,89],{"class":88},"sTEyZ"," console",[41,91,92],{"class":62},".",[41,94,96],{"class":95},"s2Zo4","log",[41,98,70],{"class":66},[41,100,74],{"class":88},[41,102,83],{"class":66},[41,104,105],{"class":62},";",[41,107,108],{"class":62}," }",[41,110,111],{"class":62}," }\n",[41,113,115,117,120,122,125,127,130,132,135,137,139,142,144],{"class":43,"line":114},3,[41,116,55],{"class":54},[41,118,119],{"class":58}," Validator",[41,121,63],{"class":62},[41,123,124],{"class":66}," validate",[41,126,70],{"class":62},[41,128,129],{"class":73},"data",[41,131,77],{"class":62},[41,133,134],{"class":58}," unknown",[41,136,83],{"class":62},[41,138,63],{"class":62},[41,140,141],{"class":47}," \u002F* ... *\u002F",[41,143,108],{"class":62},[41,145,111],{"class":62},[41,147,149],{"class":43,"line":148},4,[41,150,152],{"emptyLinePlaceholder":151},true,"\n",[41,154,156,158,161],{"class":43,"line":155},5,[41,157,55],{"class":54},[41,159,160],{"class":58}," UserService",[41,162,163],{"class":62}," {\n",[41,165,167,170,173,176,179,181,184],{"class":43,"line":166},6,[41,168,169],{"class":54},"  private",[41,171,172],{"class":66}," logger",[41,174,175],{"class":62}," =",[41,177,178],{"class":62}," new",[41,180,59],{"class":66},[41,182,183],{"class":88},"()",[41,185,186],{"class":62},";\n",[41,188,190,192,195,197,199,201,203],{"class":43,"line":189},7,[41,191,169],{"class":54},[41,193,194],{"class":66}," validator",[41,196,175],{"class":62},[41,198,178],{"class":62},[41,200,119],{"class":66},[41,202,183],{"class":88},[41,204,186],{"class":62},[41,206,208],{"class":43,"line":207},8,[41,209,210],{"class":47},"  \u002F\u002F uses both without inheriting from either\n",[41,212,214],{"class":43,"line":213},9,[41,215,216],{"class":62},"}\n",[11,218,220],{"id":219},"when-youll-hear-this","When You'll Hear This",[16,222,223],{},"\"Prefer composition over inheritance here.\" \u002F \"Composition gives us more flexibility than a deep inheritance tree.\"",[225,226,227],"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 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 .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":229},[230,231,232,233],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":219,"depth":51,"text":220},"architecture","Composition means building complex things by combining simple ones, rather than inheriting from a parent class.","intermediate","md","c",{},"\u002Fterms\u002Fc\u002Fcomposition",[242,243,244,245],"Inheritance","Dependency Injection","Design Pattern","SOLID",{"title":5,"description":235},{"changefreq":248,"priority":249},"weekly",0.7,"terms\u002Fc\u002Fcomposition","N-QdvWjfejIATpc3tyNMg2s58sk8Tb0ZB-7E4vl_DTI",[253,256,259,263],{"title":243,"path":254,"acronym":6,"category":234,"difficulty":236,"description":255},"\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":244,"path":257,"acronym":6,"category":234,"difficulty":236,"description":258},"\u002Fterms\u002Fd\u002Fdesign-pattern","Design patterns are like recipe cards for solving common coding problems.",{"title":242,"path":260,"acronym":6,"category":234,"difficulty":261,"description":262},"\u002Fterms\u002Fi\u002Finheritance","beginner","Inheritance lets a class take on all the properties and behaviors of another class.",{"title":245,"path":264,"acronym":245,"category":234,"difficulty":236,"description":265},"\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.",1776518268211]