[{"data":1,"prerenderedAt":408},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fdesign-patterns-why-and-how":286,"\u002Fblog\u002Fdesign-patterns-why-and-how-surround":401},[4],{"title":5,"path":6,"stem":7,"children":8,"page":285},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281],{"title":10,"path":11,"stem":12},"2020 - The best Javascript Frameworks","\u002Fblog\u002F2020-the-best-javascript-frameworks","blog\u002F2020 - The best Javascript Frameworks",{"title":14,"path":15,"stem":16},"5 Essential Reasons for E2E Testing","\u002Fblog\u002F5-essential-reasons-for-e2e-testing","blog\u002F5 Essential Reasons for E2E Testing",{"title":18,"path":19,"stem":20},"5 Mistakes Front-end Developers should Avoid","\u002Fblog\u002F5-mistakes-front-end-developers-should-avoid","blog\u002F5 Mistakes Front-end Developers should Avoid",{"title":22,"path":23,"stem":24},"5 Things to motivate you to perform Unit Testing","\u002Fblog\u002F5-things-to-motivate-you-to-perform-unit-testing","blog\u002F5 Things to motivate you to perform Unit Testing",{"title":26,"path":27,"stem":28},"52 Articles, 7 Books and a Pandemic","\u002Fblog\u002F52-articles-7-books-and-a-pandemic","blog\u002F52 Articles, 7 Books and a Pandemic",{"title":30,"path":31,"stem":32},"6 Levels of Autonomous Vehicles","\u002Fblog\u002F6-levels-of-autonomous-vehicles","blog\u002F6 Levels of Autonomous Vehicles",{"title":34,"path":35,"stem":36},"ADAS","\u002Fblog\u002Fadas","blog\u002FADAS",{"title":38,"path":39,"stem":40},"Ambient Intelligence","\u002Fblog\u002Fambient-intelligence","blog\u002FAmbient Intelligence",{"title":42,"path":43,"stem":44},"Best 5 Hybrid Mobile App Development Frameworks","\u002Fblog\u002Fbest-5-hybrid-mobile-app-development-frameworks","blog\u002FBest 5 Hybrid Mobile App Development Frameworks",{"title":46,"path":47,"stem":48},"Best Practices for Code Testing","\u002Fblog\u002Fbest-practices-for-code-testing","blog\u002FBest Practices for Code Testing",{"title":50,"path":51,"stem":52},"Blockchains - How and Why?","\u002Fblog\u002Fblockchains-how-and-why","blog\u002FBlockchains - How and Why",{"title":54,"path":55,"stem":56},"Brain Computer Interfaces","\u002Fblog\u002Fbrain-computer-interfaces","blog\u002FBrain Computer Interfaces",{"title":58,"path":59,"stem":60},"Computational Fluid Dynamics","\u002Fblog\u002Fcomputational-fluid-dynamics","blog\u002FComputational Fluid Dynamics",{"title":62,"path":63,"stem":64},"Computer Vision","\u002Fblog\u002Fcomputer-vision","blog\u002FComputer Vision",{"title":66,"path":67,"stem":68},"Cryptography","\u002Fblog\u002Fcryptography","blog\u002FCryptography",{"title":70,"path":71,"stem":72},"Cyber-Physical Systems: Where Digital Meets Reality","\u002Fblog\u002Fcyber-physical-systems","blog\u002FCyber-Physical Systems",{"title":74,"path":75,"stem":76},"Design Patterns - Why and How?","\u002Fblog\u002Fdesign-patterns-why-and-how","blog\u002FDesign Patterns - Why and How",{"title":78,"path":79,"stem":80},"Edge AI: Revolutionizing Intelligence at the Edge","\u002Fblog\u002Fedge-ai","blog\u002FEdge AI",{"title":82,"path":83,"stem":84},"Edge Computing","\u002Fblog\u002Fedge-computing","blog\u002FEdge Computing",{"title":86,"path":87,"stem":88},"Embracing Decentralized Development","\u002Fblog\u002Fembracing-decentralized-development","blog\u002FEmbracing Decentralized Development",{"title":90,"path":91,"stem":92},"Extended Reality Simplified","\u002Fblog\u002Fextended-reality-simplified","blog\u002FExtended Reality Simplified",{"title":94,"path":95,"stem":96},"Good practices for Git","\u002Fblog\u002Fgood-practices-for-git","blog\u002FGood practices for Git",{"title":98,"path":99,"stem":100},"How do browsers work","\u002Fblog\u002Fhow-do-browsers-work","blog\u002FHow do browsers work",{"title":102,"path":103,"stem":104},"How to be a Full Stack Engineer","\u002Fblog\u002Fhow-to-be-a-full-stack-engineer","blog\u002FHow to be a Full Stack Engineer",{"title":106,"path":107,"stem":108},"How to be an effective Engineer?","\u002Fblog\u002Fhow-to-be-an-effective-engineer","blog\u002FHow to be an effective Engineer",{"title":110,"path":111,"stem":112},"How to choose components for a desktop PC on your own","\u002Fblog\u002Fhow-to-choose-components-for-a-desktop-pc-on-your-own","blog\u002FHow to choose components for a desktop PC on your own",{"title":114,"path":115,"stem":116},"Industry 4.0","\u002Fblog\u002Findustry-4","blog\u002FIndustry 4",{"title":118,"path":119,"stem":120},"Industry 4.0 & Mixed Reality","\u002Fblog\u002Findustry-4-and-mixed-reality","blog\u002FIndustry 4 & Mixed Reality",{"title":122,"path":123,"stem":124},"Internet of Behaviours","\u002Fblog\u002Finternet-of-behaviours","blog\u002FInternet of Behaviours",{"title":126,"path":127,"stem":128},"Internet of Things","\u002Fblog\u002Finternet-of-things","blog\u002FInternet of Things",{"title":130,"path":131,"stem":132},"Let's talk about SOLID Principles","\u002Fblog\u002Flets-talk-about-solid-principles","blog\u002FLets talk about SOLID Principles",{"title":134,"path":135,"stem":136},"LiDAR","\u002Fblog\u002Flidar","blog\u002FLiDAR",{"title":138,"path":139,"stem":140},"Machine Vision -Transforming Industries AI","\u002Fblog\u002Fmachine-vision-transforming-industries-ai","blog\u002FMachine Vision -Transforming Industries AI",{"title":142,"path":143,"stem":144},"Mathematics in Software Engineering","\u002Fblog\u002Fmathematics-in-software-engineering","blog\u002FMathematics in Software Engineering",{"title":146,"path":147,"stem":148},"Micro Frontends - A Modern Approach to Front-End Development","\u002Fblog\u002Fmicro-frontends-a-modern-approach-to-front-end-development","blog\u002FMicro Frontends - A Modern Approach to Front-End Development",{"title":150,"path":151,"stem":152},"Natural Language Processing","\u002Fblog\u002Fnatural-language-processing","blog\u002FNatural Language Processing",{"title":154,"path":155,"stem":156},"Optimizing for Search Engines","\u002Fblog\u002Foptimizing-for-search-engines","blog\u002FOptimizing for Search Engines",{"title":158,"path":159,"stem":160},"Physics Engine","\u002Fblog\u002Fphysics-engine","blog\u002FPhysics Engine",{"title":162,"path":163,"stem":164},"Point cloud","\u002Fblog\u002Fpoint-cloud","blog\u002FPoint cloud",{"title":166,"path":167,"stem":168},"Processes for Better Software Volume 1","\u002Fblog\u002Fprocesses-for-better-software-volume-1","blog\u002FProcesses for Better Software Volume 1",{"title":170,"path":171,"stem":172},"Processes for Better Software Volume 2","\u002Fblog\u002Fprocesses-for-better-software-volume-2","blog\u002FProcesses for Better Software Volume 2",{"title":174,"path":175,"stem":176},"Processes for Better Software Volume 3","\u002Fblog\u002Fprocesses-for-better-software-volume-3","blog\u002FProcesses for Better Software Volume 3",{"title":178,"path":179,"stem":180},"Quantum Computers","\u002Fblog\u002Fquantum-computers","blog\u002FQuantum Computers",{"title":182,"path":183,"stem":184},"Quantum Computing and its Potential Impact on Software Development","\u002Fblog\u002Fquantum-computing-and-its-potential-impact-on-software-development","blog\u002FQuantum Computing and its Potential Impact on Software Development",{"title":186,"path":187,"stem":188},"Quantum Cryptography","\u002Fblog\u002Fquantum-cryptography","blog\u002FQuantum Cryptography",{"title":190,"path":191,"stem":192},"Ray tracing - What you need to know","\u002Fblog\u002Fray-tracing-what-you-need-to-know","blog\u002FRay tracing - What you need to know",{"title":194,"path":195,"stem":196},"Reflections on how we code","\u002Fblog\u002Freflections-on-how-we-code","blog\u002FReflections on how we code",{"title":198,"path":199,"stem":200},"Robotic Process Automation","\u002Fblog\u002Frobotic-process-automation","blog\u002FRobotic Process Automation",{"title":202,"path":203,"stem":204},"Self Driving Cars - A Better Tomorrow","\u002Fblog\u002Fself-driving-cars-a-better-tomorrow","blog\u002FSelf Driving Cars - A Better Tomorrow",{"title":206,"path":207,"stem":208},"Semantic Web - A Smarter Future","\u002Fblog\u002Fsemantic-web-a-smarter-future","blog\u002FSemantic Web A Smarter Future",{"title":210,"path":211,"stem":212},"Sensor Fusion","\u002Fblog\u002Fsensor-fusion","blog\u002FSensor Fusion",{"title":214,"path":215,"stem":216},"Serverless Computing and the Future","\u002Fblog\u002Fserverless-computing-and-the-future","blog\u002FServerless Computing and the Future",{"title":218,"path":219,"stem":220},"Shaders","\u002Fblog\u002Fshaders","blog\u002FShaders",{"title":222,"path":223,"stem":224},"Smart Home Automation","\u002Fblog\u002Fsmart-home-automation","blog\u002FSmart Home Automation",{"title":226,"path":227,"stem":228},"The Horizon of Cybersecurity","\u002Fblog\u002Fthe-horizon-of-cybersecurity","blog\u002FThe Horizon of Cybersecurity",{"title":230,"path":231,"stem":232},"The Perils of Ray-Tracing","\u002Fblog\u002Fthe-perils-of-ray-tracing","blog\u002FThe Perils of Ray-Tracing",{"title":234,"path":235,"stem":236},"The Psychology of Software Bugs Understanding and Preventing Common Mistakes","\u002Fblog\u002Fthe-psychology-of-software-bugs-understanding-and-preventing-common-mistakes","blog\u002FThe Psychology of Software Bugs - Understanding and Preventing Common Mistakes",{"title":238,"path":239,"stem":240},"Top 5 Advantages of MongoDB","\u002Fblog\u002Ftop-5-advantages-of-mongodb","blog\u002FTop 5 Advantages of MongoDB",{"title":242,"path":243,"stem":244},"Top Trends in Augmented Reality","\u002Fblog\u002Ftop-trends-in-augmented-reality","blog\u002FTop Trends in Augmented Reality",{"title":246,"path":247,"stem":248},"Top features of Unreal Engine","\u002Fblog\u002Ftop-features-of-unreal-engine","blog\u002FTop features of Unreal Engine",{"title":250,"path":251,"stem":252},"Unity 3D - Why to go with it?","\u002Fblog\u002Funity-3d-why-to-go-with-it","blog\u002FUnity 3D - Why to go with it",{"title":254,"path":255,"stem":256},"Virtual Reality Advantages","\u002Fblog\u002Fvirtual-reality-advantages","blog\u002FVirtual Reality Advantages",{"title":258,"path":259,"stem":260},"Virtual Test Drive & Autonomous Driving","\u002Fblog\u002Fvirtual-test-drive-and-autonomous-driving","blog\u002FVirtual Test Drive & Autonomous Driving",{"title":262,"path":263,"stem":264},"WebAssembly and Progressive Web Apps","\u002Fblog\u002Fwebassembly-and-progressive-web-apps","blog\u002FWebAssembly and Progressive Web Apps",{"title":266,"path":267,"stem":268},"What are Best Practices?","\u002Fblog\u002Fwhat-are-best-practices","blog\u002FWhat are Best Practices",{"title":270,"path":271,"stem":272},"What are Digital Twins?","\u002Fblog\u002Fwhat-are-digital-twins","blog\u002FWhat are Digital Twins",{"title":274,"path":275,"stem":276},"What makes Mixed Reality the next big thing?","\u002Fblog\u002Fwhat-makes-mixed-reality-the-next-big-thing","blog\u002FWhat makes Mixed Reality the next big thing",{"title":278,"path":279,"stem":280},"Why Game Engines?","\u002Fblog\u002Fwhy-game-engines","blog\u002FWhy Game Engines",{"title":282,"path":283,"stem":284},"Why we need User Experience Design?","\u002Fblog\u002Fwhy-we-need-user-experience-design","blog\u002FWhy we need User Experience Design",false,{"id":287,"title":74,"author":288,"body":292,"date":392,"description":393,"extension":394,"image":395,"meta":396,"minRead":397,"navigation":398,"path":75,"seo":399,"stem":76,"__hash__":400},"blog\u002Fblog\u002FDesign Patterns - Why and How.md",{"name":289,"avatar":290},"Aghil Jose",{"src":291,"alt":289},"\u002Fassets\u002Fimages\u002Fabout.jpg",{"type":293,"value":294,"toc":383},"minimark",[295,299,302,305,308,313,320,323,326,329,332,335,338,341,344,347,350,353,356,359,363,369,372,375,380],[296,297,298],"p",{},"Design patterns are bound to pop up in the horizon of most software engineers\nsooner or later. Undoubtedly on of the most powerful weapon in one’s arsenal\nif used correctly.",[296,300,301],{},"Now, a design pattern is not a piece of reusable code or library that you can\nincorporate in your software. It is more like a way of thinking about a\nproblem and coming up with a good strategy of execution to solve the same.",[296,303,304],{},"Obviously, they didn’t just pop out of somewhere overnight. They are the\nresult of lessons learned, years of experience, learning from mistakes as well\nas sharing those experiences with other engineers.",[296,306,307],{},"In short, design patterns try to solve the issues that come along with change.",[309,310,312],"h2",{"id":311},"ever-changing-software","Ever Changing Software",[296,314,315],{},[316,317],"img",{"alt":318,"src":319},"change","\u002Fassets\u002Fimages\u002Fblog\u002F070920\u002Fchange.jpg",[296,321,322],{},"Version 1.0 is just an incomplete software. Every good software that stood the\ntrial of time has undergone constant evolution. Google and Apple just didn’t\nrelease Android and iOS respectively stood back. Both Operating Systems went\nconstant upgrades and are at stable versions of version 10 and 13 right now\nand they are still evolving.",[296,324,325],{},"All this just doesn’t happen by magic. They were required careful analysis,\nplanning and changes in the source code.",[296,327,328],{},"Changing any source can result in make rise to a number of problems. It is\ncommon knowledge that when you make changes to your source code to accommodate\nnew features, it might result in unwelcome breakage at someplace else. The\ntechnical explanation for this is, the code is tightly coupled in the\nobject-oriented programming.",[296,330,331],{},"In object-oriented programming, application is broken down into tiny pieces\ncalled classes which are responsible for taking care of certain functionality\nof the software. One class could be handling logging while another is taking\ncare of database management.",[296,333,334],{},"By breaking it down like this, the engineer avoids creating a giant monolithic\napplication. The resulting application and its components will be easier to\nunderstand to not only the engineer\u002Fs who creates this, but also the engineers\nwho then later inherit the responsibility of maintaining the same. It also\nhelps understand how the components interact with each other.",[296,336,337],{},"But object-oriented programming does have its perils. Chief among them being –\ntight coupling. As mentioned before, classes will interact with each other to\nmake the software work. Classes cannot exist as independent and self-isolated\nin object-oriented programming.",[296,339,340],{},"Since one class may need to depend on the services and functionality of one or\nmore other classes, changing the definition or functionality could cause\nunwanted rippling effect on the classes that depend on them and that is called\ntight coupling.",[296,342,343],{},"This is where the knowledge of design patterns comes in handy. An engineer\ncould analyze the problem and then implement appropriate design pattern\u002Fs.\nWhen implemented appropriately, this will make the code easier to modify. A\ncode that is easier to change is easy to maintain as well.",[296,345,346],{},"But the design patterns have also opened doors for new problems as well.\nCaused by the abuse of the same. They are called Anti-patterns.",[296,348,349],{},"** Anti-Patterns** **",[296,351,352],{},"Throughout the brief history of software design and development, every new\nprogramming language, every methodology was always thought by most to be the\nultimate solution. But as time goes on, every engineer would realize that\nthere has never been an ultimate solution or an “ultimate silver bullet\nsolution”.",[296,354,355],{},"As in most, one thing that constant for software engineering is also change.\nThere will always be newer technology stacks, new programming languages and\nnew software design methodologies. Agile and Scrum are relatively new to the\ngame, but one day they too shall be replaced by something else. Something\nbetter.",[296,357,358],{},"But we can safely say that there is but one golden and universal design\npattern – KISS (Keep It Simple, Stupid).",[309,360,362],{"id":361},"kiss-keep-it-simple-stupid","KISS (Keep It Simple, Stupid)",[296,364,365],{},[316,366],{"alt":367,"src":368},"kiss","\u002Fassets\u002Fimages\u002Fblog\u002F070920\u002Fkiss.jpg",[296,370,371],{},"Every new line of code that we write is a new potential thing which can go\nwrong. So, logically, the less we write, the time and effort we need to spend\nfixing, maintaining or refactoring it will also be less. Any code you write\nshould be simple, easy to read by other engineers and easy to change, which is\neasier said than done.",[296,373,374],{},"But we might be inspired to do it always right if we think like the following.",[376,377,379],"h3",{"id":378},"always-code-as-if-the-guy-who-ends-up-maintain-your-code-will-be-a-violent-psychopath-who-knows-where-you-live","Always code as if the guy who ends up maintain your code will be a violent psychopath who knows where you live.",[296,381,382],{},"Disclaimer : The views and opinions expressed in the article belong solely to the\nauthor, and not necessarily to the author's employer, organisation, committee\nor other group or individual.",{"title":384,"searchDepth":385,"depth":385,"links":386},"",2,[387,388],{"id":311,"depth":385,"text":312},{"id":361,"depth":385,"text":362,"children":389},[390],{"id":378,"depth":391,"text":379},3,"2020-09-07","A brief explanation of the need and use of design patterns.","md","\u002Fassets\u002Fimages\u002Fblog\u002F070920\u002FdpTitle.jpg",{},5,true,{"title":74,"description":393},"GTr0lQaSbQL7lK1Sw2g7qKSYocNFZvQexqdIHHF4efk",[402,405],{"path":267,"title":266,"description":403,"date":404},"Brief explanation of commonly agreed upon best practices in software engineering.","2020-09-14",{"path":171,"title":170,"description":406,"date":407},"Best practices for software engineers continued.","2020-09-02",1790439209708]