{"componentChunkName":"component---src-templates-blog-post-jsx","path":"/blog/solid-is-it-still-useful-in-2021/","result":{"data":{"site":{"siteMetadata":{"name":"Huzaifa Rasheed","title":"Huzaifa Rasheed","description":"Software Engineer","about":"\n      Hey, I'm Huzaifa.\n      <br/><br/>\n      Engineer by trade, builder by instinct - I believe in owning my stack, shipping fast, and occasionally running on chai (tea) and stubbornness. I work best in that sweet spot between deep focus and fast feedback - solo or in sync with a good team.\n      <br/><br/>\n      This site's my little corner of the internet - part portfolio, part lab - where I document what I build, break, or learn.\n      <br/><br/>\n      Outside work, I'm into long walks, pixel-perfect headshots in FPS games (eventually... maybe), plants I probably overwater, and the occasional \"classified\" hobby to stay curious.\n      <br/><br/>\n      Reach out anytime - my digital door's always open. 👋\n    ","twitter":"https://twitter.com/huzRasheed","github":"https://github.com/huzaifa-99","linkedin":"https://www.linkedin.com/in/huzaifa-rasheed/","devto":"https://dev.to/huzaifa99","stackoverflow":"https://stackoverflow.com/users/12579290/huzaifa","leetcode":"https://leetcode.com/rhuzaifa","discord":"https://discordapp.com/users/rhuzaifa","email":"dev@rhuzaifa.com","projects":[{"name":"FFMpeg Web","description":"An experimental browser-based terminal that runs FFmpeg using WebAssembly, enabling media processing directly in the browser.","link":"https://ffmpeg-web.rhuzaifa.com/","github":"https://github.com/huzaifa-99/ffmpeg-web"},{"name":"Feed base 2","description":"A mini browser game where players manipulate 4-bit binary blocks to match target BCD values - part puzzle, part binary logic trainer.","link":"https://feedbase2.rhuzaifa.com/","github":"https://github.com/huzaifa-99/feed-base-2"},{"name":"Fabric browser extension","description":"A Chrome extension that injects engineered Fabric prompts directly into the ChatGPT interface for enhanced workflow automation.","link":"https://github.com/huzaifa-99/fabric-browser-extension","github":"https://github.com/huzaifa-99/fabric-browser-extension"},{"name":"Pure Cinema","description":"An experimental, tongue-in-cheek text-to-video generator that stitches together footage, synthesized voiceovers, and background music with a Node.js + ffmpeg pipeline. Not quite Hollywood, but it renders.","link":"https://cinema.rhuzaifa.com","github":null},{"name":"Aria2c Packload","description":"A Bash script for bulk downloading magnet links or torrents using aria2c - optimized for series or list-based transfers.","link":"https://github.com/huzaifa-99/aria2c-packload","github":"https://github.com/huzaifa-99/aria2c-packload"},{"name":"RSS Watchdog","description":"A lightweight Bash script that watches RSS/Atom feeds and compiles a Markdown-based reading checklist for Unix systems.","link":"https://github.com/huzaifa-99/rss-watchdog","github":"https://github.com/huzaifa-99/rss-watchdog"},{"name":"QuoteGen","description":"A quote graphic generator that produces stylized quote images with random selection and a built-in editor for customization.","link":"https://quotegen.rhuzaifa.com/","github":null},{"name":"WebRTC Video Chat","description":"A basic WebRTC-powered app enabling peer-to-peer video and audio calls between two users.","link":"https://webrtc-video-chat.rhuzaifa.com/","github":null}],"experience":null,"skills":[{"name":"Languages & Frameworks","description":"JavaScript, TypeScript, Python, Bash - Frameworks include Node.js, React, Next.js, Vue, React Native, FastAPI."},{"name":"Databases & Storage","description":"PostgreSQL, MySQL, MongoDB - Experience with schema design, indexing, query optimization, and migrations."},{"name":"Cloud & Infrastructure","description":"AWS (EC2, RDS, S3, Lambda), Vercel, Netlify, Heroku - Comfortable with serverless, autoscaling, and cost optimization."},{"name":"DevOps & Tooling","description":"Docker, Git, CI/CD pipelines (GitHub Actions, GitLab CI) - Experience with observability, containerization, and release workflows."},{"name":"Testing & QA Automation","description":"Jest, Playwright, Puppeteer, Selenium - Focus on E2E testing, mocking APIs, and maintaining test coverage."}]}},"markdownRemark":{"id":"ff4be167-1347-5493-b628-ab8cb19cbacd","excerpt":"Repost of https://dev.to/rhuzaifa/solid-is-it-still-useful-in-2021-5ff6 Why Even Bother? In the software development world, there are 2 extremes. People who don…","html":"<blockquote>\n<p>Repost of <a href=\"https://dev.to/rhuzaifa/solid-is-it-still-useful-in-2021-5ff6\">https://dev.to/rhuzaifa/solid-is-it-still-useful-in-2021-5ff6</a></p>\n</blockquote>\n<h2>Why Even Bother?</h2>\n<p>In the software development world, there are 2 extremes.</p>\n<ul>\n<li>People who don’t follow best practices.</li>\n<li>People who follow them to the extreme.</li>\n</ul>\n<p><img src=\"https://media.giphy.com/media/3o7aCTPPm4OHfRLSH6/giphy.gif\" alt=\"SpongBob Gif\"></p>\n<p>If you are lazy like me you mostly don’t follow best-practices because <strong><a href=\"https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it#:~:text=%22You%20aren&#x27;t%20gonna%20need,add%20functionality%20until%20deemed%20necessary.\">YAGNI(You aren’t gonna need it)</a></strong> but if you are like me you mostly do follow best-practices like <strong>SOLID Design Principles</strong>.</p>\n<p><strong>Wait. Why am I on both sides?</strong> Because I follow both depending on what I am doing. If it’s simple, limited/scoped, and predictable then who needs to overthink about best practices but if it’s complex, may-become-complex, should be scalable and maintainable then yeah, we need best practices.</p>\n<p>If you are building a system that would need changes in the future then you are going to be happy about how <strong>SOLID</strong> can make your life easy.</p>\n<h2>What is SOLID?</h2>\n<p>SOLID is an acronym for 5 principles</p>\n<ul>\n<li><strong>S.</strong> 👉 <strong><a href=\"/blog/why-you-should-be-following-the-single-responsibility-principle\">Single Responsibility</a></strong></li>\n<li><strong>O.</strong> 👉 <strong><a href=\"/blog/explained-open-close-principle-in-2-minutes\">Open/Close</a></strong></li>\n<li><strong>L.</strong> 👉 <strong><a href=\"/blog/is-the-liskov-substitution-principle-really-useful\">Liskov Substitution</a></strong></li>\n<li><strong>I.</strong>   👉 <strong><a href=\"/blog/is-it-practical-to-use-interface-segregation-principle\">Interface Segregation</a></strong></li>\n<li><strong>D.</strong> 👉 <strong><a href=\"/blog/why-the-dependency-inversion-principle-is-worth-using\">Dependency Inversion</a></strong></li>\n</ul>\n<p>They aim to make your code manageable, maintainable, and scalable along with other benefits.</p>\n<h4>Note</h4>\n<p>They are not Rules, but best practices.</p>\n<h3>The Person Behind SOLID</h3>\n<p>This was in the year 2000. <strong><a href=\"https://en.wikipedia.org/wiki/Robert_C._Martin\">Robert C. Martin</a></strong> first introduced SOLID as a subset of different design principles in his paper <strong><em>Design Principles and Design Patterns</em></strong>.</p>\n<p>Design principles and patterns are different, <strong>SOLID</strong> are principles.</p>\n<h2>So What Do The Principles Mean?</h2>\n<p>Each SOLID principle aims to achieve a certain goal by following a certain rule. </p>\n<h3>1. Single Responsibility Principle</h3>\n<p>It aims to separate behaviors or concerns. Meaning that every piece of code should have a specific purpose of existence and it should be used for that purpose only. </p>\n<h4>Example</h4>\n<p>The following function should only validate a user given their id.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">validateUser</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">userId</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// will validate user with their userId</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>For a complete reference, check out the <strong><a href=\"/blog/why-you-should-be-following-the-single-responsibility-principle\">Single Responsibility Principle</a></strong> in detail.</p>\n<h3>2. Open/Close Principle</h3>\n<p>The goal is to prevent those situations in which changing a piece of code from a module also requires us to update all depending modules. Basically, we don’t allow new code to make changes to our old code. </p>\n<p>We can <strong><em>extend</em></strong> code but not <strong><em>modify</em></strong> it. One real-life use case is of those softwares that have backward compatibility.</p>\n<h4>Example</h4>\n<p>A typescript example</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">interface</span> <span class=\"token class-name\">PaymentMethod</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">pay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> boolean\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Cash</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">PaymentMethod</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token function\">pay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// handle cash pay logic here</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">makePayment</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">payMethod<span class=\"token operator\">:</span> PaymentMethod</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>payMethod<span class=\"token punctuation\">.</span><span class=\"token function\">pay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">return</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>In the above code if we want to add credit card payment all we have to do is add the following code (along with the actual implementation) and it will work just fine</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">CreditCard</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">PaymentMethod</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token function\">pay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// handle credit pay logic here</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>For a complete reference, check out my other article on <strong><a href=\"/blog/explained-open-close-principle-in-2-minutes\">Open/Close Principle</a></strong>.</p>\n<h3>3. Liskov Substitution Principle</h3>\n<p>What this principle tells us is that if we replace an instance of a child class with a parent class, our code should still work fine without breaking or having side effects. </p>\n<h4>Example</h4>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Printer</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">function</span> <span class=\"token function\">changeSettings</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// common functionality</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">function</span> <span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// common functionality</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">LaserPrinter</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Printer</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">function</span> <span class=\"token function\">changeSettings</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// ... Laser Printer specific code</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">function</span> <span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// ... Laser Printer specific code</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">_3DPrinter</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Printer</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">function</span> <span class=\"token function\">changeSettings</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// ... 3D printer specific code</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">function</span> <span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// ... 3D printer specific code</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>This principle however has its limitations some of which I discussed in its own separate article. See <strong><a href=\"/blog/is-the-liskov-substitution-principle-really-useful\">Liskov Substitution Principle</a></strong> for an example of its limitations.</p>\n<h3>4. Interface Segregation Principle</h3>\n<p>This principle aim’s to use role interfaces (or role modules in general) which are designed for a specific purpose and should only be used for those. It says</p>\n<blockquote>\n<p>Clients Should Not Be Forced To Depend Upon Interfaces That They Do Not Use.</p>\n</blockquote>\n<p>This principle solves some of the issues with the Interface Segregation Principle like the Bird example I mentioned in my article on <strong><a href=\"/blog/is-the-liskov-substitution-principle-really-useful\">Liskov Substitution Principle</a></strong></p>\n<h4>Example</h4>\n<p>This is a typescript example but still not too difficult to understand.</p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">interface</span> <span class=\"token class-name\">BirdFly</span><span class=\"token punctuation\">{</span>\n    <span class=\"token function\">fly</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">interface</span> <span class=\"token class-name\">BirdWalk</span><span class=\"token punctuation\">{</span>\n    <span class=\"token function\">walk</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Duck</span> implement BirdFly<span class=\"token punctuation\">,</span> BirdWalk<span class=\"token punctuation\">{</span>\n    <span class=\"token function\">fly</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Duck can fly</span>\n    <span class=\"token punctuation\">}</span>   \n    <span class=\"token function\">walk</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Duck can walk</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Ostrich</span> implement BirdWalk<span class=\"token punctuation\">{</span>\n    <span class=\"token function\">walk</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Ostrich can walk</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span> </code></pre></div>\n<p>For a complete reference, check out the <strong><a href=\"/blog/is-it-practical-to-use-interface-segregation-principle\">Interface Segregation Principle</a></strong> in detail.</p>\n<h3>5. Dependency Inversion Principle</h3>\n<p>It focuses on using abstraction or facade/wrapper patterns to hide details of low-level modules from their high-level implementation.</p>\n<p>We basically create wrapper classes that sit in between high-level and low-level modules. This helps a lot if the low-level implementations are different from each other.</p>\n<h4>Example</h4>\n<p>Again a typescript example</p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">interface</span> <span class=\"token class-name\">Payment</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">pay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">boolean</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// (Wrapper/Abstraction around cash payment)</span>\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">CashHandler</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">Payment</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span>user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>user <span class=\"token operator\">=</span> user\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>CashPayment <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CashPayment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token function\">pay</span><span class=\"token punctuation\">(</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>CashPayment<span class=\"token punctuation\">.</span><span class=\"token function\">pay</span><span class=\"token punctuation\">(</span>amount<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// (low-level module)</span>\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">CashPayment</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token function\">pay</span><span class=\"token punctuation\">(</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// handle cash payment logic</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// (High-level Module)</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">makePayment</span><span class=\"token punctuation\">(</span>amount<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">,</span> paymentMethod<span class=\"token operator\">:</span> Payment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>paymentMethod<span class=\"token punctuation\">.</span><span class=\"token function\">pay</span><span class=\"token punctuation\">(</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>For a complete reference, check out the <strong><a href=\"/blog/why-the-dependency-inversion-principle-is-worth-using\">Dependency Inversion Principle</a></strong> in detail.</p>\n<h2>When To Use What And Avoid What</h2>\n<p>Now that we know a brief about each principle, we will look at when to use and avoid them.</p>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Use</th>\n<th>Avoid</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Single Responsibility</strong></td>\n<td>For Scalable and Maintainable Code.</td>\n<td>When too much Fragmentation occurs without predictable future changes.</td>\n</tr>\n<tr>\n<td><strong>Open Close</strong></td>\n<td>To prevent old code from breaking due to a new one.</td>\n<td>When over-engineering.</td>\n</tr>\n<tr>\n<td><strong>Liskov Substitution</strong></td>\n<td>Parent/Child used interchangeably without breaking.</td>\n<td>When substitutions do not make sense. (Bird example)</td>\n</tr>\n<tr>\n<td><strong>Interface Segregation</strong></td>\n<td>For Role-specific interfaces.</td>\n<td>When difficult to aggregate  (due to a lot of modules) from segregation.</td>\n</tr>\n<tr>\n<td><strong>Dependency Inversion</strong></td>\n<td>For different low-level implementations.</td>\n<td>When different implementations of a low-level module are not needed,  like the String class in most languages are not changed because it’s not needed to mostly.</td>\n</tr>\n</tbody>\n</table>\n<br/>\nThese are mostly the reasons and you can disagree but it all comes down to what you are dealing with.\n<h2>Is SOLID Still Useful in 2021?</h2>\n<p>Ask yourself. Is there a language that does everything with one line of code?</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token function\">do_everything</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>I guess not, unless you or someone makes a language that uses less code than python and does everything with one line of code, you do need <strong>SOLID</strong> design principles.</p>\n<p>Of course, there are extremes and cases where it’s just not possible to implement <strong>SOLID</strong>, but if you are comfortable and can use SOLID then you probably should.</p>\n<hr>\n<h3>Conclusion</h3>\n<p>So, what’s your take on this? Do you follow an approach similar to mine? Be sure to give this article a 💖 if you like it. </p>","frontmatter":{"title":"Solid. Is It Still Useful In 2021?","date":"April 04, 2021","description":"Explore the relevance of SOLID principles in modern software development. From fostering maintainable and scalable code to navigating real-world examples, this article delves into the practical applications and significance of SOLID design principles in today's coding landscape."}}},"pageContext":{"slug":"/blog/solid-is-it-still-useful-in-2021/","previous":{"fields":{"slug":"/blog/why-the-dependency-inversion-principle-is-worth-using/"},"frontmatter":{"title":"Why The Dependency Inversion Principle Is Worth Using"}},"next":{"fields":{"slug":"/blog/regex-the-minimum-you-need-to-know/"},"frontmatter":{"title":"Regex? The Minimum You Need To Know."}}}},"staticQueryHashes":["2276319502"]}