<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Moniruzzaman Saikat</title>
    <description>The latest articles on DEV Community by Moniruzzaman Saikat (@moniruzzamansaikat).</description>
    <link>https://dev.to/moniruzzamansaikat</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F533319%2Fac66aca7-8ee8-4f3b-982a-e60986e67fde.jpg</url>
      <title>DEV Community: Moniruzzaman Saikat</title>
      <link>https://dev.to/moniruzzamansaikat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moniruzzamansaikat"/>
    <language>en</language>
    <item>
      <title>The Future of Software Development: What Developers Should Expect</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 23 Jun 2026 18:52:27 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/the-future-of-software-development-what-developers-should-expect-177c</link>
      <guid>https://dev.to/moniruzzamansaikat/the-future-of-software-development-what-developers-should-expect-177c</guid>
      <description>&lt;p&gt;Software development is changing faster than ever.&lt;/p&gt;

&lt;p&gt;Over the past decade, we have seen the rise of cloud computing, mobile applications, DevOps, containers, and artificial intelligence. Technologies that once felt revolutionary have become standard tools in a developer's workflow.&lt;/p&gt;

&lt;p&gt;As we look toward the future, one question continues to emerge:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will developers still be needed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The short answer is yes.&lt;/p&gt;

&lt;p&gt;However, the role of developers is evolving. The future will not belong to developers who simply write code. It will belong to developers who can solve problems, understand business requirements, leverage AI effectively, and continuously adapt to new technologies.&lt;/p&gt;

&lt;p&gt;Let's explore what the future of software development may look like from a developer's perspective.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Will Become a Standard Development Tool
&lt;/h2&gt;

&lt;p&gt;Artificial intelligence is already transforming how developers work.&lt;/p&gt;

&lt;p&gt;Tools such as AI coding assistants can generate boilerplate code, explain complex functions, write tests, and even suggest bug fixes.&lt;/p&gt;

&lt;p&gt;Many developers fear AI will replace programmers.&lt;/p&gt;

&lt;p&gt;In reality, AI is more likely to replace repetitive tasks than developers themselves.&lt;/p&gt;

&lt;p&gt;Future developers will spend less time writing basic code and more time focusing on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Business logic&lt;/li&gt;
&lt;li&gt;Architecture decisions&lt;/li&gt;
&lt;li&gt;Security considerations&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning how to collaborate with AI may become as important as learning a programming language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coding Will Become More Accessible
&lt;/h2&gt;

&lt;p&gt;Historically, software development required deep technical knowledge.&lt;/p&gt;

&lt;p&gt;Today, low-code and no-code platforms allow non-technical users to build simple applications.&lt;/p&gt;

&lt;p&gt;This trend will continue.&lt;/p&gt;

&lt;p&gt;Businesses will increasingly use visual development tools for straightforward applications and workflows.&lt;/p&gt;

&lt;p&gt;However, complex systems will still require experienced developers.&lt;/p&gt;

&lt;p&gt;Enterprise software, financial systems, healthcare platforms, and large-scale SaaS applications cannot rely entirely on drag-and-drop tools.&lt;/p&gt;

&lt;p&gt;Developers will continue to play a critical role where complexity exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Demand for Problem Solvers Will Increase
&lt;/h2&gt;

&lt;p&gt;Companies do not hire developers because they need code.&lt;/p&gt;

&lt;p&gt;They hire developers because they need solutions.&lt;/p&gt;

&lt;p&gt;As AI becomes better at generating code, technical implementation becomes less of a competitive advantage.&lt;/p&gt;

&lt;p&gt;Understanding the problem becomes more valuable than writing the solution.&lt;/p&gt;

&lt;p&gt;Future developers who can bridge the gap between technology and business will stand out.&lt;/p&gt;

&lt;p&gt;This means developing skills such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Critical thinking&lt;/li&gt;
&lt;li&gt;Product understanding&lt;/li&gt;
&lt;li&gt;Requirements analysis&lt;/li&gt;
&lt;li&gt;Leadership&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ability to solve real-world problems will become a major differentiator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Stack Skills Will Become More Valuable
&lt;/h2&gt;

&lt;p&gt;The boundaries between frontend, backend, infrastructure, and operations are becoming increasingly blurred.&lt;/p&gt;

&lt;p&gt;Modern developers often work with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend frameworks&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Cloud services&lt;/li&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Monitoring tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While specialization will remain important, developers who understand the entire software lifecycle will have significant advantages.&lt;/p&gt;

&lt;p&gt;The future favors developers who can see the bigger picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Will Become Everyone's Responsibility
&lt;/h2&gt;

&lt;p&gt;Cybersecurity threats continue to grow every year.&lt;/p&gt;

&lt;p&gt;In the past, security was often handled by dedicated teams.&lt;/p&gt;

&lt;p&gt;Today, secure development practices are becoming part of every developer's responsibilities.&lt;/p&gt;

&lt;p&gt;Future developers will need a stronger understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Data protection&lt;/li&gt;
&lt;li&gt;Secure coding practices&lt;/li&gt;
&lt;li&gt;Vulnerability management&lt;/li&gt;
&lt;li&gt;Compliance requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security awareness will no longer be optional.&lt;/p&gt;

&lt;p&gt;It will be a core development skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remote Development Is Here to Stay
&lt;/h2&gt;

&lt;p&gt;The global software industry has proven that remote teams can build world-class products.&lt;/p&gt;

&lt;p&gt;This has created opportunities for developers worldwide.&lt;/p&gt;

&lt;p&gt;A talented developer in Bangladesh, India, Nigeria, or Brazil can now compete for opportunities that were once limited to specific geographic regions.&lt;/p&gt;

&lt;p&gt;The future workforce will be increasingly global.&lt;/p&gt;

&lt;p&gt;Developers who can communicate effectively, collaborate asynchronously, and work independently will thrive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Learning Will Be Mandatory
&lt;/h2&gt;

&lt;p&gt;One constant in software development is change.&lt;/p&gt;

&lt;p&gt;Programming languages evolve.&lt;/p&gt;

&lt;p&gt;Frameworks change.&lt;/p&gt;

&lt;p&gt;New tools emerge.&lt;/p&gt;

&lt;p&gt;Entire technology stacks can become obsolete within a few years.&lt;/p&gt;

&lt;p&gt;The most successful developers will not be those who know a particular framework.&lt;/p&gt;

&lt;p&gt;They will be those who know how to learn quickly.&lt;/p&gt;

&lt;p&gt;Adaptability will become one of the most valuable skills in the industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Productivity Will Increase Dramatically
&lt;/h2&gt;

&lt;p&gt;Modern tools are already helping developers accomplish more with less effort.&lt;/p&gt;

&lt;p&gt;In the future, developers may build applications in days that previously required weeks or months.&lt;/p&gt;

&lt;p&gt;AI-assisted development, automation, cloud services, and mature frameworks will continue to accelerate software delivery.&lt;/p&gt;

&lt;p&gt;This does not mean developers will work less.&lt;/p&gt;

&lt;p&gt;Instead, expectations will increase.&lt;/p&gt;

&lt;p&gt;Businesses will expect faster development cycles, quicker releases, and higher quality products.&lt;/p&gt;

&lt;p&gt;Developers who leverage modern tools effectively will have a major advantage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Skills Should Developers Focus on Today?
&lt;/h2&gt;

&lt;p&gt;If you want to prepare for the future, focus on skills that remain valuable regardless of technological changes.&lt;/p&gt;

&lt;p&gt;These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;li&gt;Software architecture&lt;/li&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Security fundamentals&lt;/li&gt;
&lt;li&gt;Cloud computing&lt;/li&gt;
&lt;li&gt;AI-assisted development&lt;/li&gt;
&lt;li&gt;Database design&lt;/li&gt;
&lt;li&gt;Business understanding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technologies may change.&lt;/p&gt;

&lt;p&gt;Fundamental skills remain valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The future of software development is exciting, not threatening.&lt;/p&gt;

&lt;p&gt;AI will change how we write software.&lt;/p&gt;

&lt;p&gt;Automation will eliminate repetitive work.&lt;/p&gt;

&lt;p&gt;New tools will make development faster than ever before.&lt;/p&gt;

&lt;p&gt;But technology alone does not create successful software.&lt;/p&gt;

&lt;p&gt;People do.&lt;/p&gt;

&lt;p&gt;Developers who embrace change, continuously learn, and focus on solving meaningful problems will remain in demand for years to come.&lt;/p&gt;

&lt;p&gt;The future does not belong to the developers who write the most code.&lt;/p&gt;

&lt;p&gt;It belongs to the developers who create the most value.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>coding</category>
    </item>
    <item>
      <title>How to Use AI to Achieve 10x Productivity</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 23 Jun 2026 18:47:47 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/how-to-use-ai-to-achieve-10x-productivity-57of</link>
      <guid>https://dev.to/moniruzzamansaikat/how-to-use-ai-to-achieve-10x-productivity-57of</guid>
      <description>&lt;p&gt;A few years ago, being productive meant working longer hours.&lt;/p&gt;

&lt;p&gt;Today, it means working smarter.&lt;/p&gt;

&lt;p&gt;Artificial Intelligence has become one of the biggest productivity multipliers available to developers, entrepreneurs, designers, marketers, and business owners. The people getting the most value from AI are not using it to replace their work. They are using it to eliminate repetitive tasks, speed up decision making, and focus on high value activities.&lt;/p&gt;

&lt;p&gt;In this article, I will share how I use AI to dramatically increase productivity and how you can do the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop Thinking of AI as a Chatbot
&lt;/h2&gt;

&lt;p&gt;Most people open ChatGPT, ask a random question, get an answer, and close the tab.&lt;/p&gt;

&lt;p&gt;That is not where the real productivity gains come from.&lt;/p&gt;

&lt;p&gt;Think of AI as a digital assistant that can help with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research&lt;/li&gt;
&lt;li&gt;Writing&lt;/li&gt;
&lt;li&gt;Coding&lt;/li&gt;
&lt;li&gt;Planning&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Customer support&lt;/li&gt;
&lt;li&gt;Content creation&lt;/li&gt;
&lt;li&gt;Data analysis&lt;/li&gt;
&lt;li&gt;Brainstorming&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to ask better questions occasionally.&lt;/p&gt;

&lt;p&gt;The goal is to build workflows where AI becomes part of your daily process.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Use AI for Research
&lt;/h2&gt;

&lt;p&gt;Research can consume hours.&lt;/p&gt;

&lt;p&gt;Instead of opening twenty browser tabs, start with AI.&lt;/p&gt;

&lt;p&gt;For example, instead of searching:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is Laravel queue processing?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Explain Laravel queues like I am a junior developer. Include practical examples and common mistakes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You get a structured overview within seconds.&lt;/p&gt;

&lt;p&gt;This does not replace verification, but it drastically reduces the time needed to understand a topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Turn AI Into Your Personal Writing Assistant
&lt;/h2&gt;

&lt;p&gt;Writing documentation, emails, proposals, blog posts, and social media content takes time.&lt;/p&gt;

&lt;p&gt;AI can generate first drafts almost instantly.&lt;/p&gt;

&lt;p&gt;Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog outlines&lt;/li&gt;
&lt;li&gt;Product descriptions&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Client emails&lt;/li&gt;
&lt;li&gt;Meeting summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest productivity boost comes from eliminating the blank page problem.&lt;/p&gt;

&lt;p&gt;Instead of starting from zero, start with a draft and improve it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Use AI for Coding
&lt;/h2&gt;

&lt;p&gt;This is where many developers experience massive productivity gains.&lt;/p&gt;

&lt;p&gt;AI can help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate boilerplate code&lt;/li&gt;
&lt;li&gt;Explain unfamiliar code&lt;/li&gt;
&lt;li&gt;Debug issues&lt;/li&gt;
&lt;li&gt;Create database schemas&lt;/li&gt;
&lt;li&gt;Write test cases&lt;/li&gt;
&lt;li&gt;Generate documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, instead of spending thirty minutes creating a CRUD structure, you can generate the foundation in minutes and focus on business logic.&lt;/p&gt;

&lt;p&gt;The key is understanding the code before using it.&lt;/p&gt;

&lt;p&gt;AI should accelerate development, not replace engineering judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Automate Repetitive Tasks
&lt;/h2&gt;

&lt;p&gt;Every repetitive task is a candidate for AI assistance.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formatting data&lt;/li&gt;
&lt;li&gt;Creating reports&lt;/li&gt;
&lt;li&gt;Summarizing meetings&lt;/li&gt;
&lt;li&gt;Generating content variations&lt;/li&gt;
&lt;li&gt;Writing support responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you perform the same task more than three times per week, ask yourself:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can AI help me do this faster?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer is often yes.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Use AI as a Thinking Partner
&lt;/h2&gt;

&lt;p&gt;One underrated use of AI is brainstorming.&lt;/p&gt;

&lt;p&gt;Whenever I am stuck on a problem, I ask AI to challenge my assumptions.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give me five alternative solutions to this business problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What risks am I missing in this project?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This often reveals ideas I would not have considered on my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Build Prompt Templates
&lt;/h2&gt;

&lt;p&gt;Many people waste time rewriting the same prompts.&lt;/p&gt;

&lt;p&gt;Create reusable templates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blog Post Prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Act as a technical writer.

Write a detailed blog post about [TOPIC].

Target audience: [AUDIENCE]

Include:
- Introduction
- Practical examples
- Common mistakes
- Conclusion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have a library of prompts, your productivity increases significantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Focus on Output, Not Activity
&lt;/h2&gt;

&lt;p&gt;AI changes how we measure productivity.&lt;/p&gt;

&lt;p&gt;Being busy is not the goal.&lt;/p&gt;

&lt;p&gt;Producing results is.&lt;/p&gt;

&lt;p&gt;If AI helps you complete a task in 10 minutes instead of 1 hour, that is not cheating.&lt;/p&gt;

&lt;p&gt;That is efficiency.&lt;/p&gt;

&lt;p&gt;The most productive professionals are not necessarily the hardest workers.&lt;/p&gt;

&lt;p&gt;They are often the best at leveraging tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Blindly Trusting AI
&lt;/h3&gt;

&lt;p&gt;Always verify important information.&lt;/p&gt;

&lt;p&gt;AI can make mistakes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Vague Prompts
&lt;/h3&gt;

&lt;p&gt;Poor prompts lead to poor outputs.&lt;/p&gt;

&lt;p&gt;Provide context, goals, and constraints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trying to Automate Everything
&lt;/h3&gt;

&lt;p&gt;Not every task should be delegated.&lt;/p&gt;

&lt;p&gt;Focus on repetitive and low value work first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI is not a magic button.&lt;/p&gt;

&lt;p&gt;It will not automatically make you productive.&lt;/p&gt;

&lt;p&gt;The real advantage comes from integrating AI into your daily workflow and using it consistently.&lt;/p&gt;

&lt;p&gt;Start small.&lt;/p&gt;

&lt;p&gt;Choose one repetitive task you do every day.&lt;/p&gt;

&lt;p&gt;Use AI to reduce the time required for that task.&lt;/p&gt;

&lt;p&gt;Then repeat the process.&lt;/p&gt;

&lt;p&gt;Over time, the small improvements compound.&lt;/p&gt;

&lt;p&gt;That is where the real 10x productivity gains come from.&lt;/p&gt;

</description>
      <category>coding</category>
      <category>ai</category>
      <category>claude</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Mon, 29 Sep 2025 03:58:20 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/-bdn</link>
      <guid>https://dev.to/moniruzzamansaikat/-bdn</guid>
      <description></description>
    </item>
    <item>
      <title>Top 10 Most Design Patterns You Should Learn</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 15 Jul 2025 21:04:47 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/top-10-most-design-patterns-you-should-learn-49a7</link>
      <guid>https://dev.to/moniruzzamansaikat/top-10-most-design-patterns-you-should-learn-49a7</guid>
      <description>&lt;p&gt;You should learn design patterns because they give you proven, reusable solutions to common software design problems. Instead of reinventing the wheel every time, patterns help you write code that is clean, scalable, flexible, and easy to maintain. They teach you how to think in structures, not just syntax — making it easier to communicate with other developers, architect complex systems, and avoid spaghetti code. Whether you're working on a small app or a big enterprise system, design patterns help you build software that lasts.&lt;/p&gt;

&lt;p&gt;And here are top 10 of them you should start learning now.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Factory Pattern
&lt;/h3&gt;

&lt;p&gt;Creates objects without exposing the instantiation logic to the client. &lt;br&gt;
Used when you want to delegate the creation of objects to a single point — instead of scattering new Class() everywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Strategy Pattern
&lt;/h3&gt;

&lt;p&gt;Enables selecting an algorithm at runtime by encapsulating each behavior in a separate class. Avoids if-else/switch by letting you swap logic like payment methods or sorting strategies dynamically.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Singleton Pattern
&lt;/h3&gt;

&lt;p&gt;Ensures a class has only one instance and provides global access to it. Perfect when one shared thing (like a database connection or logger) needs to be accessed everywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Observer Pattern
&lt;/h3&gt;

&lt;p&gt;Defines a one-to-many dependency so that when one object changes state, all its dependents are notified. Aka event listeners — used in UI, notifications, activity logs.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Decorator Pattern
&lt;/h3&gt;

&lt;p&gt;Adds new behaviors to objects dynamically without changing their structure. Wrap an object to extend its functionality (great alternative to subclassing).&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Adapter Pattern
&lt;/h3&gt;

&lt;p&gt;Converts the interface of a class into another interface that a client expects. Useful for integrating incompatible systems or third-party APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Builder Pattern
&lt;/h3&gt;

&lt;p&gt;Constructs complex objects step-by-step, allowing different representations using the same construction process. Best for creating objects with many optional parameters.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Facade Pattern
&lt;/h3&gt;

&lt;p&gt;Provides a simplified, unified interface to a complex subsystem. Hides all the complexity behind one simple class/interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Command Pattern
&lt;/h3&gt;

&lt;p&gt;Encapsulates a request as an object, allowing it to be queued, logged, or undone. Perfect for systems where actions can be delayed, repeated, or undone.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Chain of Responsibility Pattern
&lt;/h3&gt;

&lt;p&gt;Passes a request along a chain of handlers until one handles it. Each handler decides whether to handle the request or pass it along.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>designpattern</category>
      <category>architect</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>ফ্যাক্টরি – একটি অবজেক্ট ক্রিয়েশনাল প্যাটার্ন</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 15 Jul 2025 20:41:42 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/phyaakttri-ektti-abjektt-kriyeshnaal-pyaattaarn-5c11</link>
      <guid>https://dev.to/moniruzzamansaikat/phyaakttri-ektti-abjektt-kriyeshnaal-pyaattaarn-5c11</guid>
      <description>&lt;p&gt;এটি একটি ডিজাইন প্যাটার্ন যা অবজেক্ট তৈরির লজিককে আলাদা করে রাখে, যাতে আপনার মূল অ্যাপ্লিকেশন কোড নির্দিষ্ট ক্লাসের নামের উপর নির্ভরশীল না হয়। শুধু ফ্যাক্টরিকে বলে দেন, আর আপনি যেই অবজেক্ট চাবেন তা পেয়ে যাবেন। &lt;/p&gt;

&lt;p&gt;ফ্যাক্টরি প্যাটার্নকে একটি পাওয়ার প্লাগ অ্যাডাপ্টারের মতো করে ভাবেন। আপনি যেকোনো একটা ডিভাইস (ল্যাপটপ, ফোন, টিভি) এতে যুক্ত করেন, আর এটি সঠিক কারেন্ট সরবরাহ করে — এটা কীভাবে কাজ করছে তা নিয়ে চিন্তা করার দরকার নাই। ফ্যাক্টরি প্যাটার্নের মূল লক্ষ্য হইতেছে অবজেক্ট তৈরিকে বিজিনেস লজিক থেকে আলাদা করে ফেলা, যাতে আপনার কোড আরও ফ্লেক্সিবল, টেস্টেবল এবং সহজে রক্ষণাবেক্ষণযোগ্য হয়।&lt;/p&gt;

&lt;p&gt;চলেন একটা উদাহরণ দেখি, ফ্যাক্টরি প্যাটার্নর যেটা ডকুমেন্ট এক্সপোর্টার নিচ্ছে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Exporter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PdfExporter&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Exporter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Exporting as PDF"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CsvExporter&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Exporter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Exporting as CSV"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExportFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getExporter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$format&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Exporter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$format&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'pdf'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PdfExporter&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s1"&gt;'csv'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CsvExporter&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Invalid export format"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage&lt;/span&gt;
&lt;span class="nv"&gt;$exporter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ExportFactory&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;getExporter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'csv'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$exporter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;export&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ফ্যাক্টরি প্যাটার্ন কেন ইউজ করা লাগে?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;আপনি অবজেক্ট তৈরিকে ছেন্ট্রালাইজড করতে চান&lt;/li&gt;
&lt;li&gt;আপনি কোড ডিকপল করতে চান (ক্লায়েন্ট জানবে না যে সে কোন ক্লাস ব্যবহার করছে)&lt;/li&gt;
&lt;li&gt;ক্লায়েন্ট কোড টাচ না করেই আপনি কোন অবজেক্ট তৈরি করা হয়েছে তা পরিবর্তন করার ফ্লেক্সিবিলিটি চান&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এখানে একটি নোটিফিকেশন সেন্ডার (ইমেল, এসএমএস, পুশ, যাই হোক না কেন) সিস্টেমের আরেকটি উদাহরণ দেওয়া হল:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EmailNotifier&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Sending Email: &lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SMSNotifier&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Sending SMS: &lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PushNotifier&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Sending Push Notification: &lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NotificationFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'email'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;EmailNotifier&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s1"&gt;'sms'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SMSNotifier&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s1"&gt;'push'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PushNotifier&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Invalid notifier type"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage&lt;/span&gt;
&lt;span class="nv"&gt;$notifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NotificationFactory&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sms'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$notifier&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Factory pattern rocks!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  হাহা, এখন চলেন একটা গল্প পড়ি যাতে বুঝতে আরো সুবিধা হয়, ঠিক আছে?
&lt;/h3&gt;

&lt;p&gt;ছোট্ট টেকনোলজি টাউন ছিল, যেখানে সৈকত নামে এক জন বাচ্চা প্রোগ্রামার থাকতো। আর হালায় একটা পপুলার রেস্টুরেন্ট “কোড ক্রাস্ট পিৎজা”র জন্য অনলাইন ফুড অর্ডারিং সিস্টেম বানাইতেছিল।&lt;/p&gt;

&lt;p&gt;কিন্তু প্রতি বার যখন কাস্টমার মার্গারিটা, পেপারোনি বা ভেজি পিৎজা অর্ডার দিত, সৈকতের অ্যাপের কাজ হইত এরকম:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$margherita&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MargheritaPizza&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$pepperoni&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PepperoniPizza&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$veggie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VeggiePizza&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর বুঝেন ভাই, এভাবে এখানে ওখানে সব জায়গায় পিৎজা তৈরির কোড থাকলে কেমন খারাপ-টা লাগে! দুই-তিনটা ক্লাস পর্যন্ত তো ঠিক ছিল, কিন্তু একসময় রেস্টুরেন্ট আর দশটা পিৎজা টাইপ যোগ করলো আর কিছু পিৎজার বেক করার ধরনও বদলাতে চাইলো। তখন বুঝেন ব্যাপারটা কেমন গোলমাল হয়ে গেল!&lt;/p&gt;

&lt;p&gt;ওওওওঁ, একটা আইডিয়া আসল, ধরেন যদি আমি কাউকে সব নতুন পিৎজা বানানোর কাজ দিয়ে দিই (মোটামুটি সব প্রসেস), আর ক্লায়েন্ট সাইড থেকে সেটা খুব সহজে ইউজ করতে পারি! তখনই ভাবল একটা PizzaFactory বানানো যাক — যে বুদ্ধিমান(হাহা) রান্নাঘরের সহকারী, যাকে বলে দিলেই যেকোন পিৎজা তৈরী করতে পারে।&lt;/p&gt;

&lt;p&gt;আর এখানে হল সেইটা:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Pizza&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;deliverd&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MargheritaPizza&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Pizza&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Preparing Margherita Pizza"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PepperoniPizza&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Pizza&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Preparing Pepperoni Pizza"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PizzaFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Pizza&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'margherita'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MargheritaPizza&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s1"&gt;'pepperoni'&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PepperoniPizza&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Pizza type not found"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর ইউজ করার ধরনটা এমন (স্রেফ কাস্টমারের অর্ডার করা পিৎজার নামটা পাস করো, বাকিটা ফ্যাক্টরি নিজেই করে ফেলে দিয়ে দিবে, দারুন):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$pizza&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PizzaFactory&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'pepperoni'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$pizza&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$pizza&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;deliverd&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// shanti shanti shanti&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর কোথাও new ClassName() দিয়ে দিয়ে প্যারা খাওয়া লাগবে না। কিচেন (ফ্যাক্টরি) নিজের মতো করে সব সামলায়, আর সৈকত পেয়ে যায় শান্তি :)&lt;/p&gt;

&lt;h3&gt;
  
  
  মোরাল অব দা স্টোরিঃ
&lt;/h3&gt;

&lt;p&gt;ফ্যাক্টরি প্যাটার্ন একদম রেস্টুরেন্টের রান্নাঘরেরই মতো — ক্লায়েন্টরা (সৈকতের অ্যাপ) সরাসরি খাবার বানায় না। তারা রান্নাঘরের (ফ্যাক্টরির) কাছে যায়, আর রান্নাঘর সঠিক ডিশ বানায়ে বানায়ে পরিবেশন করে।&lt;/p&gt;

</description>
      <category>factory</category>
      <category>factorypattern</category>
      <category>designpattern</category>
      <category>php</category>
    </item>
    <item>
      <title>Factory - The Object Creational Pattern</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 15 Jul 2025 20:14:43 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/factory-the-object-creational-pattern-1k62</link>
      <guid>https://dev.to/moniruzzamansaikat/factory-the-object-creational-pattern-1k62</guid>
      <description>&lt;p&gt;It's a design pattern that encapsulates object creation logic so your main application code doesn’t depend on concrete class names. Just ask the factory and get what you need.&lt;/p&gt;

&lt;p&gt;Think of the Factory Pattern as a power plug adapter. You plug in any device (Laptop, Phone, TV), and it gives you the correct current — without worrying about how it works. The Factory Pattern’s main goal is to decouple object creation from business logic, making your code flexible, testable, and easy to maintain.&lt;/p&gt;

&lt;p&gt;Here is an example of factory pattern using a case of document exporter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Exporter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PdfExporter&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Exporter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Exporting as PDF"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CsvExporter&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Exporter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Exporting as CSV"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExportFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getExporter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$format&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Exporter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$format&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'pdf'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PdfExporter&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s1"&gt;'csv'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CsvExporter&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Invalid export format"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage&lt;/span&gt;
&lt;span class="nv"&gt;$exporter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ExportFactory&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;getExporter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'csv'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$exporter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;export&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why should you use factory pattern ?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want to centralize object creation&lt;/li&gt;
&lt;li&gt;You want to decouple code (client doesn’t know which exact class it is using)&lt;/li&gt;
&lt;li&gt;You want flexibility to change which object is created, without touching client code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is another example by a notification sender (Email, SMS, Push, Whatever) system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EmailNotifier&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Sending Email: &lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SMSNotifier&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Sending SMS: &lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PushNotifier&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Sending Push Notification: &lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NotificationFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Notifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'email'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;EmailNotifier&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s1"&gt;'sms'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SMSNotifier&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s1"&gt;'push'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PushNotifier&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Invalid notifier type"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage&lt;/span&gt;
&lt;span class="nv"&gt;$notifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NotificationFactory&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sms'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$notifier&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Factory pattern rocks!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Hahaha, Lemme tell you a story for better understand okay:
&lt;/h2&gt;

&lt;p&gt;Once upon a time in a small tech town, there lived a programmer named Saikat. And halay was building an online food ordering system for a popular restaurant called "Code Crust Pizza".&lt;/p&gt;

&lt;p&gt;But each time a customer ordered a pizza — Margherita, Pepperoni, or Veggie — Saikat's app had to do something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$margherita&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MargheritaPizza&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$pepperoni&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PepperoniPizza&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$veggie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VeggiePizza&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and you know how bad is this when in the system you do all these here and there. it's fine with 2/3 classes until the restaurant added 10 more pizza types and wanted to change the way some pizzas were baked. &lt;/p&gt;

&lt;p&gt;oh oh oh, an idea like okay: what if I order someone to build all the things for a new pizza(all the processes in it) and it will just be used from the client codebase in a very simple way. So this is the time to build a PizzaFactory — a smart kitchen helper who knows how to prepare any pizza.&lt;/p&gt;

&lt;p&gt;and here it's :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Pizza&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;deliverd&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MargheritaPizza&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Pizza&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Preparing Margherita Pizza"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PepperoniPizza&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Pizza&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Preparing Pepperoni Pizza"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PizzaFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Pizza&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'margherita'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MargheritaPizza&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s1"&gt;'pepperoni'&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PepperoniPizza&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Pizza type not found"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and the use case is like(just pass the customer's ordered pizza name there, all things are done in it's own way, ouch):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$pizza&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PizzaFactory&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'pepperoni'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$pizza&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$pizza&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;deliverd&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// shanti shanti shanti&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No more new ClassName() all over the place. The kitchen (factory) handles it, and it's peace :)&lt;/p&gt;

&lt;h3&gt;
  
  
  Moral of the story:
&lt;/h3&gt;

&lt;p&gt;The Factory Pattern is like a kitchen in a restaurant — clients (your app) don’t create dishes directly. They ask the kitchen (factory), which prepares and serves the right item.&lt;/p&gt;

</description>
      <category>designpattern</category>
      <category>factorymethod</category>
      <category>factorypattern</category>
      <category>php</category>
    </item>
    <item>
      <title>Understanding the CRM Sales Process</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Thu, 15 May 2025 03:25:12 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/understanding-the-crm-sales-process-3o18</link>
      <guid>https://dev.to/moniruzzamansaikat/understanding-the-crm-sales-process-3o18</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A solid CRM system revolves around a predictable and trackable &lt;strong&gt;sales process&lt;/strong&gt;. Here's a breakdown of the typical flow followed in most CRM platforms like Salesforce, EspoCRM, Zoho, or your own custom-built solution.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  💼 Sales Process Overview:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;Lead ➜ Opportunity ➜ Quote ➜ Order ➜ Invoice&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the backbone of most B2B sales workflows, where each stage reflects a deeper commitment from the potential customer.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. 🧲 &lt;strong&gt;Lead&lt;/strong&gt; — Initial Interest
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Lead&lt;/strong&gt; represents someone who has shown interest in your product or service but hasn’t been qualified yet.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;John from “Acme Corp” fills out the &lt;em&gt;Contact Us&lt;/em&gt; form on your website, asking about your CRM solution.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Typical Fields in a CRM:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name, Email, Phone&lt;/li&gt;
&lt;li&gt;Company Name&lt;/li&gt;
&lt;li&gt;Source (Website, Ad, Referral)&lt;/li&gt;
&lt;li&gt;Assigned Sales Rep&lt;/li&gt;
&lt;li&gt;Lead Score&lt;/li&gt;
&lt;li&gt;Status (New, Contacted, Disqualified, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📈 &lt;strong&gt;Goal:&lt;/strong&gt; Determine if the lead is a good fit — and if so, convert them into a &lt;strong&gt;Contact&lt;/strong&gt;, &lt;strong&gt;Account&lt;/strong&gt;, and &lt;strong&gt;Opportunity&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. 💰 &lt;strong&gt;Opportunity&lt;/strong&gt; — Qualified Deal in Progress
&lt;/h3&gt;

&lt;p&gt;Once the lead is confirmed to be serious and potentially ready to buy, it's converted into an &lt;strong&gt;Opportunity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You have a discovery call with John. He's a decision-maker with a budget and wants to purchase a CRM within 30 days.&lt;br&gt;
You create:&lt;br&gt;
📝 &lt;strong&gt;Opportunity Name:&lt;/strong&gt; “CRM Deal with Acme Corp”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Common Fields:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deal Value (e.g., \$2,500)&lt;/li&gt;
&lt;li&gt;Stage (e.g., Proposal, Negotiation)&lt;/li&gt;
&lt;li&gt;Expected Close Date&lt;/li&gt;
&lt;li&gt;Probability %&lt;/li&gt;
&lt;li&gt;Linked Contact &amp;amp; Account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📈 &lt;strong&gt;Goal:&lt;/strong&gt; Track deal progress and activities like calls, demos, or meetings.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. 📄 &lt;strong&gt;Quote&lt;/strong&gt; — Formal Price Proposal
&lt;/h3&gt;

&lt;p&gt;When your customer wants exact pricing, you issue a &lt;strong&gt;Quote&lt;/strong&gt;, which includes itemized costs, terms, and validity.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧾 Quote #Q-2025-043&lt;br&gt;
"CRM Pro Plan – 10 users"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Quote Fields:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quote Number&lt;/li&gt;
&lt;li&gt;Products/Services&lt;/li&gt;
&lt;li&gt;Unit Price, Quantity, Taxes, Discounts&lt;/li&gt;
&lt;li&gt;Total Amount&lt;/li&gt;
&lt;li&gt;Expiry Date&lt;/li&gt;
&lt;li&gt;Status (Draft, Sent, Accepted, Rejected)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📈 &lt;strong&gt;Goal:&lt;/strong&gt; Share formal pricing → wait for customer acceptance.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. ✅ &lt;strong&gt;Order&lt;/strong&gt; — Purchase Confirmed
&lt;/h3&gt;

&lt;p&gt;The customer accepts the quote. An &lt;strong&gt;Order&lt;/strong&gt; is generated, indicating commitment.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📦 Order #ORD-34324&lt;br&gt;
Quote accepted — the sales team triggers account setup.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Order Fields:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linked Quote&lt;/li&gt;
&lt;li&gt;Billing Info&lt;/li&gt;
&lt;li&gt;Delivery Terms or Provisioning Status&lt;/li&gt;
&lt;li&gt;Order Date&lt;/li&gt;
&lt;li&gt;Internal Notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📈 &lt;strong&gt;Goal:&lt;/strong&gt; Fulfill the order → activate services or ship product.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. 💳 &lt;strong&gt;Invoice&lt;/strong&gt; — Payment Request
&lt;/h3&gt;

&lt;p&gt;Once the service is delivered or the order is processed, the system issues an &lt;strong&gt;Invoice&lt;/strong&gt; to collect payment.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📃 Invoice #INV-2025-102&lt;br&gt;
\$500 due by June 5, 2025&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Invoice Fields:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invoice Number&lt;/li&gt;
&lt;li&gt;Linked Order/Customer&lt;/li&gt;
&lt;li&gt;Due Date&lt;/li&gt;
&lt;li&gt;Payment Status (Unpaid, Paid, Overdue)&lt;/li&gt;
&lt;li&gt;Tax Breakdown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📈 &lt;strong&gt;Goal:&lt;/strong&gt; Get paid → mark invoice as settled.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧭 Recap: Sales Flow in Action
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lead (Interest) 
   ↓
Opportunity (Qualified)
   ↓
Quote (Price Proposal)
   ↓
Order (Confirmed)
   ↓
Invoice (Payment)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each step involves specific data, people, and workflows that help your team manage and scale the sales cycle efficiently.&lt;/p&gt;




</description>
      <category>crm</category>
      <category>sales</category>
      <category>erp</category>
      <category>b2b</category>
    </item>
    <item>
      <title>Next.js sucks in terms of real single page application</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Wed, 19 Mar 2025 20:03:26 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/nextjs-sucks-in-terms-of-really-single-page-application-1hhf</link>
      <guid>https://dev.to/moniruzzamansaikat/nextjs-sucks-in-terms-of-really-single-page-application-1hhf</guid>
      <description>&lt;p&gt;Why next.js sucks is clear, while we have a much bigger or much customizable projects it cannot handle the flow in terms of single page application. Let's you have a tons of css file you made for different layouts to be loaded, then you have to make full page refresh and I think all the projects based on this framework does this. Don't know how it's handled in vue or angular or svelte yet, will try those asap. &lt;/p&gt;

&lt;p&gt;So what is the ultimate solution here in situation ? Let's break it down. &lt;/p&gt;

&lt;p&gt;You cannot have a single  layout throughout your application, instead you have to create multiple root layout and the project structure will look like this  👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnmhxsiu8zc56i4v3xdx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnmhxsiu8zc56i4v3xdx.png" alt=" " width="799" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here you cannot have a layout file in the root of the project, that's it. &lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to run socket.io server on cpanel shared hosting even on subfolder ?</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Mon, 10 Mar 2025 06:15:25 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/how-to-run-socketio-server-on-cpanel-on-even-subfolder--1mh9</link>
      <guid>https://dev.to/moniruzzamansaikat/how-to-run-socketio-server-on-cpanel-on-even-subfolder--1mh9</guid>
      <description>&lt;p&gt;Let's we will host a socket.io + express server on cpanel's shared hosting. For this example I will host the server on mydomain.com/test22, so the folder is test22.&lt;/p&gt;

&lt;h2&gt;
  
  
  First of all setup the node.js app on cpanel
&lt;/h2&gt;

&lt;p&gt;Please follow the image to setup a node.js app on cpanel hosting&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fe2sbqkh0cpzwh2k9bf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fe2sbqkh0cpzwh2k9bf.png" alt=" " width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As our main focus is not here to setup the node.js application on the shared hosting we will continue to focus on the socket.io setup both on the client and server side.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;socketIo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;socket.io&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 

&lt;span class="cm"&gt;/** We will only modify the following path once, 
and in other places e.g. on middlewares or whereever we need
will use the following constant */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BASE_PATH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/test22&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;io&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;socketIo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;BASE_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="cm"&gt;/** Here in the following middleware express will handle 
the subfolder's path for us */&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;BASE_PATH&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;BASE_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="cm"&gt;/** Do whatever you need with socket **/&lt;/span&gt;
&lt;span class="nx"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;connection&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="c1"&gt;// .... &lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// API Route for Testing&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/chat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Chat is running. Connect via WebSocket.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Start Server&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;5555&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And on the client side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// .env file &lt;/span&gt;
&lt;span class="nx"&gt;NEXT_PUBLIC_SOCKET_SERVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//mydomain.com&lt;/span&gt;
&lt;span class="nx"&gt;NEXT_PUBLIC_SUBFOLDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;test22&lt;/span&gt;


&lt;span class="c1"&gt;// in some kind of component&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;io&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;socket.io-client&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;socketRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;io&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_SOCKET_SERVER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_SUBFOLDER&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// now do whatever you want with the socket connnection:&lt;/span&gt;
&lt;span class="nx"&gt;socketRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;registerUser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
     &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;newOnlineUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;onlineUsers&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>socketio</category>
      <category>express</category>
      <category>cpanelhosting</category>
      <category>cpanelsocketio</category>
    </item>
    <item>
      <title>পাইথন প্রোগ্রামিং এ ভেরিয়েবল এবং ডাটাটাইপ</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Wed, 25 Aug 2021 09:39:39 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/-20he</link>
      <guid>https://dev.to/moniruzzamansaikat/-20he</guid>
      <description>&lt;p&gt;variable শব্দটার বাংলা অর্থ হচ্ছে চলক। তার মানে এই জিনিসটা পরিবর্তিত হতে পারবে। অন্যকথায়, ভেরিয়েবল হচ্ছে ধারক বা container বা placeholder. অর্থাৎ, ভেরিয়েবলের মধ্যে তুমি কোন একটা ডাটা রেখে দিতে পার, যা পরে তুমি তোমার প্রোগ্রামে ব্যাবহার করতে পারবে। &lt;/p&gt;

&lt;p&gt;তো, এই variable এর মধ্যে তুমি যেকোন ডাটাই রেখে দিতে পার। এইটা হতে পারে তোমার নাম(string), তোমার বয়স(number) অথবা কোন একটা একটা কথা সত্যি নাকি মিথ্যা(boolean). তো এই যে ডাটাগুলা তুমি কোন একটা container বা variable এর মধ্যে রাখতেছ, তো ঐ variable এর একটা নাম দিতে হবে না 🤨? তাহলেই তো তুমি ঐ নামের মাধ্যমে ডাটা টাকে অ্যাক্সেস করতে পারবা। &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;নোটঃ পাইথন প্রোগ্রামিং এ তোমাকে নির্দিষ্ট করে বলে দিতে হবে না যে, তুমি কি ধরনের ডাটা তোমার ভেরিয়েবলের মধ্যে রাখতেছ। তুমি just একটা variable এর নাম দিয়েই এর মধ্যে ডাটা টাকে রেখে দিতে পারবা।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  কিভাবে একটি ভেরিয়েবল Declare(তৈরি) করে মান নির্ধারন(assign) করে দিতে হয় 🤔
&lt;/h3&gt;

&lt;p&gt;তো মনে কর, তুমি একটা প্রোগ্রাম লিখছ । যেখানে তোমাকে একজন user এর নাম মনে(contain) রাখতে হবে। তো তাহলে তোমাকে প্রথমেই একটা ভেরিয়েবলের নাম declare করতে হবে, তারপর &lt;code&gt;=&lt;/code&gt; (সমান) এর মাধ্যমে তোমাকে একটা মান assign করে দিতে হবে। একটা জিনিস মনে রাখতে হবে, তুমি কিন্তু চাইলেই যেকোন কিছু নাম দিতে পারবে না। ভেরিয়েবলের নাম কিভাবে নির্ধারণ করতে হয়, তা নিচে বিস্তারিত ভাবে দেয়া আছে। &lt;/p&gt;

&lt;p&gt;আপাতত দেখ, নিচে আমি &lt;code&gt;user_name&lt;/code&gt; নামে একটা ভেরিয়েবল তৈরী করছি। যার মধ্যে &lt;code&gt;zuck123&lt;/code&gt; নামে একটা মান দিয়ে দিছি। একটা জিনিস খেয়াল করছ, আমি কী ধরণের মান assign করছি ? এইটা একটা স্ট্রিং(string) . তুমি চাইলে অন্য কিছুও ব্যাবহার করতে পারবে। যেটা আমরা &lt;code&gt;Data Type&lt;/code&gt; সেকশনে দেখব।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;user_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;zuck123&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন তুমি একটা জিনিস খেয়াল করো, উপরের যে ভেরিয়েবলটা তুমি create করছ, ঐ মানটা কী সব সময়ই একই থাকবে । না, থাকবে না । কারণ , তুমি তো আগেই জান যে variable মানে হচ্ছে চলক অর্থাৎ যার মান চলতে চলতেই পরিবর্তিত হতে পারবে । এর নিচের লাইনে এসে যদি তুমি বলে দাও &lt;code&gt;user_name&lt;/code&gt; ভেরিয়েবলটিতে অন্য কোন মান রাখ, তাহলে কিন্তু কম্পিউটার ওইখানে অন্য একটা মানই রাখবে। নিচে দেখ 👇🏼&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;user_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;zuck123&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;user_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mark Zuckerburg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেখছ, প্রথম লাইনে আমরা বলে দিলাম &lt;code&gt;user_name&lt;/code&gt; ভেরিয়েবলটিতে &lt;code&gt;zuck123&lt;/code&gt; মানটা রাখ। কিন্তু ২ নম্বর লাইনে এসে আমরা আবার বলে দিলাম যে, &lt;code&gt;user_name&lt;/code&gt; এর মধ্যে তুমি &lt;code&gt;Mark Zuckerburg&lt;/code&gt; এই মান টা রেখে দাও । তো এই জিনিসটিকেই আসলে বলা হয় &lt;strong&gt;Variable re-assign&lt;/strong&gt; করা। &lt;/p&gt;

&lt;h3&gt;
  
  
  ভেরিয়েবল নাম নির্ধারণ করার কিছু শর্ত 🧐:
&lt;/h3&gt;

&lt;p&gt;☑ ভেরিয়েবলটার নাম কেবলমাত্র &lt;code&gt;(a-z/A-Z)&lt;/code&gt; অথবা &lt;code&gt;_&lt;/code&gt; দিয়ে শুরু হতে পারবে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mr Bean&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;                &lt;span class="c1"&gt;# Right
&lt;/span&gt;&lt;span class="n"&gt;_secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Ami&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;                 &lt;span class="c1"&gt;# Right
&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Amar name a vul ace &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Wrong 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;☑ ভেরিয়েবল নামের শুরু হওয়া ব্যাতিত অন্য যেকোন জায়গায় &lt;code&gt;(a-b/A-B)&lt;/code&gt; বা &lt;code&gt;numbers&lt;/code&gt; বা &lt;code&gt;underscores&lt;/code&gt; থাকতে পারে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;ten10&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;                  &lt;span class="c1"&gt;# Right
&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="n"&gt;ten&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;                  &lt;span class="c1"&gt;# Wrong
&lt;/span&gt;&lt;span class="n"&gt;amar_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mr Zuckerburg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# Right
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;☑ ভেরিয়েবল নামের মাঝখানে কোন ফাকা জায়গা(space) রাখা যাবে না।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;amar_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mr Zuckerburg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;           &lt;span class="c1"&gt;# Right
&lt;/span&gt;&lt;span class="n"&gt;amar&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Amar name vul ache :)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Wrong
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;☑ পাইথনে ভেরিয়েবল নামগুলো &lt;code&gt;case-sensitive&lt;/code&gt; হয়ে থাকে । অর্থাৎ ছোট হাতের অক্ষর দিয়ে কোন ভেরিয়েবলের নাম আর বড় হাতের অক্ষর দিয়ে ঐ সেইম name কিন্তু একই না :)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;AmarName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mr Zuckerburg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;          &lt;span class="c1"&gt;# এইটা আলাদা
&lt;/span&gt;&lt;span class="n"&gt;amarName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Amio Mr Zuckerburg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# এইটা আলাদা
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;☑ পাইথনে কিছু &lt;code&gt;reserved&lt;/code&gt; বা নিজস্ব কিওয়ার্ড আছে। তুমি ঐ কিওয়ার্ডগুলোও ভেরিয়েবল নাম হিসেবে ব্যবহার করতে পারবে না। নিচে কিওয়ার্ডগুলো দিয়ে দেয়া হলঃ&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keywords&lt;/th&gt;
&lt;th&gt;Keywords&lt;/th&gt;
&lt;th&gt;Keywords&lt;/th&gt;
&lt;th&gt;Keywords&lt;/th&gt;
&lt;th&gt;Keywords&lt;/th&gt;
&lt;th&gt;Keywords&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;and&lt;/td&gt;
&lt;td&gt;def&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;import&lt;/td&gt;
&lt;td&gt;not&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;as&lt;/td&gt;
&lt;td&gt;del&lt;/td&gt;
&lt;td&gt;finally&lt;/td&gt;
&lt;td&gt;while&lt;/td&gt;
&lt;td&gt;in&lt;/td&gt;
&lt;td&gt;or&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;assert&lt;/td&gt;
&lt;td&gt;elif&lt;/td&gt;
&lt;td&gt;try&lt;/td&gt;
&lt;td&gt;for&lt;/td&gt;
&lt;td&gt;is&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;break&lt;/td&gt;
&lt;td&gt;else&lt;/td&gt;
&lt;td&gt;with&lt;/td&gt;
&lt;td&gt;from&lt;/td&gt;
&lt;td&gt;lambda&lt;/td&gt;
&lt;td&gt;print&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;class&lt;/td&gt;
&lt;td&gt;except&lt;/td&gt;
&lt;td&gt;yield&lt;/td&gt;
&lt;td&gt;global&lt;/td&gt;
&lt;td&gt;raise&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;continue&lt;/td&gt;
&lt;td&gt;exec&lt;/td&gt;
&lt;td&gt;if&lt;/td&gt;
&lt;td&gt;nonlocal&lt;/td&gt;
&lt;td&gt;return&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  পাইথন প্রোগ্রামিং এ ডাটা টাইপ(Data Type):
&lt;/h3&gt;

&lt;p&gt;পাইথন কিন্তু Dynamically typed একটা প্রোগ্রামিং ভাষা। অর্থাৎ,ভেরিয়েবল তৈরী করার সময় তোমাকে এর টাইপ বলে দিতে হবে না । মানে কী 🤨 ? &lt;/p&gt;

&lt;p&gt;এর মানে হচ্ছে, তুমি যখন একটা ভেরিয়েবল Decalare করতেছ, তখন তোমাকে বলে দিতে হবে না যে, তুমি কী ধরণের মান assign করতেছ, পাইথন নিজে নিজেই বুঝে যাবে যে তুমি কী &lt;code&gt;string&lt;/code&gt; assign করতেছ নাকি &lt;code&gt;number&lt;/code&gt; নাকি অন্য কিছু। &lt;/p&gt;

&lt;p&gt;কিন্তু প্রোগ্রামিং করার সময় তোমাকে অবশ্যই জানতে হবে যে তুমি কোন ধরণের ডাটার সাথে কাজ করতেছ । তাহলে, প্রোগ্রামিং করার সময় তোমার কোডগুলা অনেক efficient হবে পাশাপাশি তোমার লাইফটাও অনেক সহজ হয়ে যাবে 😊 &lt;/p&gt;

&lt;p&gt;নিচে কিছু বেসিক (basic) ডাটাটাইপ সম্পর্কে আলোচনা করা হল, যেগুলা তোমাকে অবশ্যই অবশ্যই জানতে হবে। &lt;br&gt;
✅ String or text based Data Type&lt;br&gt;
✅ Numeric Data type&lt;br&gt;
✅ Boolean or (True-False) Data Type&lt;br&gt;
✅ List Data Type&lt;/p&gt;
&lt;h4&gt;
  
  
  String Data Type
&lt;/h4&gt;

&lt;p&gt;তোমার প্রোগ্রামে বিভিন্ন সময় বিভিন্ন রকমের শব্দ,বাক্য, প্যারাগ্রাফ নিয়ে কাজ করতে হতে পারে। তো এই ক্ষেত্রে তোমাকে এই string ডাটা টাইপ ব্যাবহার করতে হবে। তো পাইথনে তুমি দুইভাবে string টাইপের ভেরিয়েবল ব্যাবহার করতে পার। সিংগেল কোটেশন(Single Quote)[&lt;code&gt;''&lt;/code&gt;] অথবা ডাবল কোটেশন(Double qutation)[&lt;code&gt;""&lt;/code&gt;]. নিচের উদাহরণ দেখ👇🏼&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;variabl1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Ami thik aci&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;variabl2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Amio thik aci:)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উপরের দুইটা ভেরিয়েবলই ঠিক আছে। কিন্তু তুমি যখন একটা paragraph লিখতে যাবে, তখন কিন্তু তুমি উপরের নিয়মে লিখতে পারবে না। অর্থাৎ single quote বা double quote দিয়ে যখন তুমি কোন string বানাবা , তখন যদি তুমি নতুন লাইনে চলে আসতে চাও তাহলে তুমি একটা এরর(error) খাবা 😥। তাহলে কী করতে হবে 🤔? তাহলে, তুমি যদি পাইথনে এমন একটা স্ট্রিং বানাইতে চাও যা কিনা multiline এর হতে পারে বা একটা paragraph হতে পারে তখন তোমাকে নিচের মত করে string declare করতে হবে 👇🏼&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;gorur_rocona&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Numeric Data Type
&lt;/h4&gt;

&lt;p&gt;তোমাকে বিভিন্ন সময় বিভিন্ন রকম নাম্বার নিয়ে কাজ করতে হতে পারে। বিভিন্ন রকম নাম্বার বলতে &lt;code&gt;float&lt;/code&gt;(দশমিক) নাম্বার, &lt;code&gt;integer&lt;/code&gt;(পূর্ণসংখ্যা)। তো পাইথনে আসলে তিন ধরণের নাম্বার আছে। &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;int (Integer বা পূর্ণসংখ্যা)&lt;/li&gt;
&lt;li&gt;float (Floating point number বা দশমিক সংখ্যা)&lt;/li&gt;
&lt;li&gt;Complex (Complex বা জটিল সংখ্যা)
নাম্বার পজিটিভ বা নেগেটিভ হতে পারবে। নিচে কয়েকটি উদাহরণ দেয়া হল 👇🏼
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;age&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;         &lt;span class="c1"&gt;# Integer Number
&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;5.6&lt;/span&gt;        &lt;span class="c1"&gt;# Float Number
&lt;/span&gt;&lt;span class="nb"&gt;complex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;87.7e100&lt;/span&gt;  &lt;span class="c1"&gt;# Complex Number
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Boolean Data Type
&lt;/h4&gt;

&lt;p&gt;ধর কোন একটা ঘটনা ঘটছে । তো, তোমাকে আমি বললাম যে তুমি শুধু বল যে ঘটনাটা আসলে ঘটছে কী না । তো তুমি একটা variable এ এই মান টা কিভাবে রাখবে ? নিচে দেখে ফেল 👇🏼&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;ghotona_ghotce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;  &lt;span class="c1"&gt;# এইখানে তুমি True অথবা False লিখতে পার 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তো এই হচ্ছে boolean. তুমি একটা ভেরিয়বলে &lt;code&gt;True&lt;/code&gt; or &lt;code&gt;False&lt;/code&gt; রাখতে পারতেছ। &lt;/p&gt;

&lt;h4&gt;
  
  
  List Data Type
&lt;/h4&gt;

&lt;p&gt;এখন তুমি তো &lt;code&gt;string&lt;/code&gt; বা &lt;code&gt;number&lt;/code&gt; ডাটা টাইপ নিয়ে কিভাবে কাজ করতে হয় শিখে ফেলছ। তাই না ? আচ্ছা, এখন যদি আমি তোমাকে বলি তোমার বেশ কয়েকজনের বন্ধুর নামের একটা লিস্ট বানিয়ে ফেল । তখন তুমি কই করবে ? তো প্রথমেই চিন্তা কর যে, একেকটা নাম কিন্তু একেকটা &lt;code&gt;string&lt;/code&gt; । এখন এরকম অনেকগুলো string নিয়েই আমাদের একটা লিস্ট বানিয়ে ফেলতে হবে। নিচে দেখ 👇🏼&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;friends&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rakib&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sakib&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Wakib&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে, অনেক গুলো item নিয়ে একটা লিস্ট হয়ে থাকে । তুমি উপরের লিস্টটাতে যেকোন রকমের value ই রাখতে পারবে। সেটা হতে পারে কোন নাম্বারের লিস্ট বা স্ট্রিং এর লিস্ট । যেমন তোমাকে যদি বলা হয় একটা নাম্বারের লিস্ট বানিয়ে ফেল। তুমি কিন্তু পারবে । কীভাবে ? &lt;code&gt;[1,2,3,4]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;তো আচ্ছা, এই যে লিস্টটা আছে । এর প্রত্যেকটি item কে বলা হয় একেকটা &lt;code&gt;element&lt;/code&gt; বা উপাদান । তো, তোমাকে আমি যদি বলি &lt;code&gt;Sakib&lt;/code&gt; নামের string টা তুমি আমাকে দাও, অথবা শুধুমাত্র ঐ string টাকে অন্য একটা variable এ রেখে দাও। এই কাজটা করার আগে একটা জিনিস জেনে রাখ, পাইথনে কিন্তু list কিন্তু 0 index based. মানে হচ্ছে, 0 তম index এ আছে Rakib, 1 তম index এ আছে Sakib আর 3 তম index এ আছে Wakib. বুঝছ, এইভাবেই চলতে থাকবে। মানে তুমি দেখেতেছ যে একটা element ১০০ তম জায়গায় আছে, তাহলে ঐ element টাকে অ্যাক্সেস করতে হলে তোমাকে কিন্তু ৯৯ তম index এ access করতে হবে। &lt;/p&gt;

&lt;p&gt;নিচের উদাহরণ টা দেখ 👇🏼&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;friends&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rakib&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sakib&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Wakib&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
&lt;span class="n"&gt;ami_sakib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;friends&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;      &lt;span class="c1"&gt;# এর মান হল Rakib
&lt;/span&gt;&lt;span class="n"&gt;ami_rakib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;friends&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;      &lt;span class="c1"&gt;# এর মান হল Sakib
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;এই ব্লগে আমরা পাইথনের বেসিক কিছু ডাটা টাইপ এবং ভেরিয়েবল নিয়ে কিভাবে কাজ করতে হয় , এগুলা শিখছি। এর পরবর্তি ব্লগে আমরা String নিয়ে বিস্তারিত ভাবে জানতে পারব 🤟🏼&lt;/p&gt;

</description>
      <category>python</category>
      <category>bangla</category>
      <category>programming</category>
      <category>variables</category>
    </item>
    <item>
      <title>CRUD operation with knex &amp; mysql in node.js</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Sat, 10 Jul 2021 09:16:48 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/crud-operation-with-knex-mysql-in-node-js-2c29</link>
      <guid>https://dev.to/moniruzzamansaikat/crud-operation-with-knex-mysql-in-node-js-2c29</guid>
      <description>&lt;h3&gt;
  
  
  In this post I will teach you how to use mysql with knex.js 😊
&lt;/h3&gt;

&lt;p&gt;Knex.js is a SQL query builder for Postgres, MSSQL, MySQL, MariaDB, SQLite3, Oracle, and Amazon Redshift designed to be flexible, portable, and fun to use. It features both traditional node style callbacks as well as a promise interface for cleaner async flow control, a stream interface, full-featured query and schema builders, transaction support (with savepoints), connection pooling and standardized responses between different query clients and dialects.&lt;/p&gt;

&lt;h4&gt;
  
  
  Create a project
&lt;/h4&gt;

&lt;p&gt;Create a folder then enter to it and then type the command bellow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
npm i express knex mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a file call &lt;code&gt;app.js&lt;/code&gt; in your project root and write these codes bellow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app running&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Server running on http://localhost:50000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, create a file for database called &lt;code&gt;db.js&lt;/code&gt; and add these codes bellow. You need to replace the user(if any, by default it's root), password (default: empty string), database name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;knex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;knex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;knex&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mysql&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localhost&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;databasename&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now in your database called(databasename, you might replace it) create a table called users. You can create the table by running these command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;isAdmin&lt;/span&gt; &lt;span class="nb"&gt;TINYINT&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ok, everything is done 😀. Now it's time to give some shots 🦵. First of all import db from our &lt;code&gt;db.js&lt;/code&gt; file. &lt;br&gt;
So, let's create a user from our app. For this make a route called '/users/create' bellow our index route. When you will visit the link &lt;a href="http://localhost:5000/users/create" rel="noopener noreferrer"&gt;http://localhost:5000/users/create&lt;/a&gt; it will create insert a user to our users table in the database. &lt;/p&gt;

&lt;h3&gt;
  
  
  Create
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./db.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users/create&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John Doe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User created&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;userId&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Read
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({...&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;users&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Update
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
       &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Saikat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User updated&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;           
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Delete
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users/delete/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;).del();
  res.send(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="nx"&gt;deleted&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;);
})

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Here is the full version
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app running&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Create a user&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users/create&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John Doe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User created&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;userId&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Query all users &lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({...&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// it's needed bcz it return something called RawDataPacket&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;users&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Update user&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
       &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Saikat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User updated&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;           
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Delete a user&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users/delete/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;).del();
  res.send(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="nx"&gt;deleted&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;);
})


app.listen(5000, () =&amp;gt; {
  console.log(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="nx"&gt;Server&lt;/span&gt; &lt;span class="nx"&gt;running&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//localhost:50000'); &lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>node</category>
      <category>mysql</category>
      <category>knex</category>
      <category>crud</category>
    </item>
    <item>
      <title>5 YouTube channel to follow as a developer</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Tue, 02 Mar 2021 15:52:19 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/5-youtube-channel-to-follow-as-a-developer-5fm8</link>
      <guid>https://dev.to/moniruzzamansaikat/5-youtube-channel-to-follow-as-a-developer-5fm8</guid>
      <description>&lt;h3&gt;
  
  
  1. &lt;a href="https://www.youtube.com/channel/UC29ju8bIPH5as8OGnQzwJyA" rel="noopener noreferrer"&gt;Traversy Media&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If you are pretty new to the world of programming or development, this is the place you should start from. &lt;a href="https://twitter.com/bradtraversy" rel="noopener noreferrer"&gt;Brad Traversy&lt;/a&gt; has pretty good and organized videos on his channel for all kind programming. Most of the time web development related videos are uploaded. But also informational videos you can find. His teaching is really awesome. Any difficult topics he teach with a very simple discussion.&lt;/p&gt;

&lt;p&gt;If you wanna be a great web developer you must have to follow him. If you need to just get started with some new topic , I highly recommend to check &lt;a href="https://www.youtube.com/playlist?list=PLillGF-RfqbYeckUaD1z6nviTp31GLTH8" rel="noopener noreferrer"&gt;this&lt;/a&gt; playlist from the channel.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;a href="https://www.youtube.com/channel/UCW5YeuERMmlnqo4oq8vwUpg" rel="noopener noreferrer"&gt;The Net Ninja&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This is channel where you can learn modern and up to date technologies in a simple way. This channel forms small videos into a series with awesome discussion in each video. If you wanna stay up to date to your industry you must follow this channel.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;a href="https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ" rel="noopener noreferrer"&gt;freeCodeCamp.org&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If you need dive deeper into technologies you must follow this channel. This channel has over 3 millions subscriber for it's organized and long times video courses. This channel does not serve tutorials from a specific instructor instead it takes videos or courses from other instructor on youtube and organize in an awesome way. It has all kinds of programming tutorials including game development, machine learning and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;a href="https://www.youtube.com/c/programmingwithmosh" rel="noopener noreferrer"&gt;Programming with Mosh&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If you want very organized tutorial this channel is for you. This channel gives paid like video tutorial. Awesome teaching style with very nice video quality. You can learn a lot of things in one video like reactJS, dotnet, pythong, javascript and more.&lt;/p&gt;

&lt;p&gt;If you like decent and organized video tutorial you must follow this channel.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;a href="https://www.youtube.com/channel/UCFbNIlppjAuEX4znoulh0Cw" rel="noopener noreferrer"&gt;Web Dev Simplified&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This channel is specifically for web developer. Learn to start you dream project sooner. Yes, this is the channel where you can learn very hard thing in a simple way. This channel has a lot of small and awesome tutorial on web development.&lt;/p&gt;

&lt;p&gt;Okay , all done.....&lt;br&gt;
Below is a list of my all favorite youtube channel: &lt;br&gt;
&lt;a href="https://www.youtube.com/channel/UCJbPGzawDH1njbqV-D5HqKw" rel="noopener noreferrer"&gt;the new boston&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UC4JX40jDee_tINbkjycV4Sg" rel="noopener noreferrer"&gt;Tech With Tim&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCvM5YYWwfLwpcQgbRr68JLQ" rel="noopener noreferrer"&gt;Adrian Twarog&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCDCHcqyeQgJ-jVSd6VJkbCw" rel="noopener noreferrer"&gt;codeSTACKr&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UClb90NQQcskPUGDIXsQEz5Q" rel="noopener noreferrer"&gt;Dev Ed&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCVyRiMvfUNMA1UPlDPzG5Ow" rel="noopener noreferrer"&gt;DesignCourse&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCsBjURrPoezykLs9EqgamOA" rel="noopener noreferrer"&gt;Fireship&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UC-T8W79DN6PBnzomelvqJYw" rel="noopener noreferrer"&gt;James Q Quick&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCSJbGtTlrDami-tDGPUV9-w" rel="noopener noreferrer"&gt;Academind&lt;/a&gt;,&lt;a href="https://www.youtube.com/channel/UCfV36TX5AejfAGIbtwTc7Zw" rel="noopener noreferrer"&gt;Chris Hawkes&lt;/a&gt;,&lt;a href="https://www.youtube.com/channel/UCvjgXvBlbQiydffZU7m1_aw" rel="noopener noreferrer"&gt;The Coding Train&lt;/a&gt;,&lt;a href="https://www.youtube.com/channel/UCyU5wkjgQYGRB0hIHMwm2Sg" rel="noopener noreferrer"&gt;LevelUpTuts&lt;/a&gt;,&lt;a href="https://www.youtube.com/channel/UC2WHjPDvbE6O328n17ZGcfg" rel="noopener noreferrer"&gt;ForrestKnight &lt;/a&gt;,&lt;a href="https://www.youtube.com/channel/UCzNf0liwUzMN6_pixbQlMhQ" rel="noopener noreferrer"&gt;Coder Coder&lt;/a&gt;,&lt;a href="https://www.youtube.com/channel/UCMZFwxv5l-XtKi693qMJptA" rel="noopener noreferrer"&gt;Coding Addict&lt;/a&gt;,&lt;a href="https://www.youtube.com/channel/UCZUyPT9DkJWmS_DzdOi7RIA" rel="noopener noreferrer"&gt;Caleb Curry&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCwRXb5dUK4cvsHbx-rGzSgw" rel="noopener noreferrer"&gt;Derek Banas &lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCfzlCWGWYyIQ0aLC5w48gBQ" rel="noopener noreferrer"&gt;sentdex &lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UC46wWUso9H5KPQcoL9iE3Ug" rel="noopener noreferrer"&gt;CodingPhase&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I am pretty new in the industry. So , please suggest for any wrong information.&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>developer</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
