<?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>How to Run a Successful Software Business in 2026</title>
      <dc:creator>Moniruzzaman Saikat</dc:creator>
      <pubDate>Fri, 10 Jul 2026 06:29:36 +0000</pubDate>
      <link>https://dev.to/moniruzzamansaikat/how-to-run-a-successful-software-business-in-2026-3675</link>
      <guid>https://dev.to/moniruzzamansaikat/how-to-run-a-successful-software-business-in-2026-3675</guid>
      <description>&lt;h2&gt;
  
  
  Executive summary
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Assumption:&lt;/strong&gt; this article is written for founders and senior product and technology leaders building a horizontal software business in 2026, typically B2B SaaS with some prosumer lessons where useful. No specific industry vertical is assumed.&lt;/p&gt;

&lt;p&gt;The strategic reality of 2026 is not that “every company needs AI.” It is that every software company now operates in a market where AI is widely adopted, buyers can research products faster, and the winning firms are those that turn AI from a demo into a governed, repeatable workflow advantage. McKinsey’s late-2025 survey found that 88% of organizations report regular AI use in at least one business function, 62% are at least experimenting with AI agents, and yet only about one-third say they have begun scaling AI across the enterprise. In other words, AI is mainstream, but scaled value is still scarce. That is the opening for disciplined software companies. citeturn20view0turn0search6&lt;/p&gt;

&lt;p&gt;The market is also moving from experimentation to budgeted spend. Menlo Ventures estimates enterprise generative AI spending rose from $11.5 billion in 2024 to $37 billion in 2025, with $19 billion going to the application layer alone. Gartner forecast worldwide AI spending at nearly $1.5 trillion in 2025 and $2.52 trillion in 2026. Stanford’s 2026 AI Index reports that global corporate AI investment more than doubled in 2025 and that generative AI reached roughly 53% population-level adoption within three years of mass-market launch. citeturn29view0turn0search12turn0search2turn19view0turn30view0&lt;/p&gt;

&lt;p&gt;The practical implication is straightforward: do not compete on “having AI.” Compete on proprietary context, workflow embedding, distribution, trust, and economics. The strongest business models in 2026 combine one of four patterns: bundled AI to defend the core suite, premium AI add-ons for governed enterprise workflows, seat-plus-usage hybrids for variable-cost workloads, and freemium-to-premium upgrades where AI expands supply and engagement. Current company behavior from GitHub, ServiceNow, Zoom, Atlassian, and Duolingo shows all four patterns working when tied to clear customer outcomes. citeturn24view4turn24view9turn25view0turn24view0turn24view2turn24view5turn19view4turn26view0&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In 2026, software is being sold into an environment where “deep research” is no longer a specialist capability. Knowledge workers can ask AI systems to compare vendors, synthesize customer references, summarize filings, inspect documentation, and pressure-test claims in minutes. That compresses information asymmetry and makes surface-level feature differentiation easier to copy and easier to expose. At the same time, agents are spreading into enterprise applications: Gartner projected in 2025 that 40% of enterprise apps would feature task-specific AI agents by 2026, while McKinsey found that agent use is most commonly reported in IT and knowledge management. citeturn0search6turn20view0&lt;/p&gt;

&lt;p&gt;That changes the definition of a successful software business. The winning company is not the one with the flashiest model. It is the one that owns a high-frequency job to be done, sits on the system of record or system of action for that workflow, makes trustworthy decisions with proprietary context, and monetizes value without letting inference cost outrun gross margin. If 2024 was the year of pilots and 2025 the year of broad adoption, 2026 is the year of operational discipline. citeturn20view0turn29view0turn19view0&lt;/p&gt;

&lt;h2&gt;
  
  
  Market trends from 2024 to 2026
&lt;/h2&gt;

&lt;p&gt;Three signals matter most. First, adoption is broadening faster than enterprise value is compounding. McKinsey reported 78% of organizations using AI in at least one business function in its March 2025 survey, up from 72% in early 2024 and 55% a year earlier; by November 2025, that figure had climbed to 88%. Yet only 39% reported any enterprise-level EBIT impact, and McKinsey’s “AI high performers” represented only about 6% of respondents. That gap between usage and measurable company-level value is exactly where durable software businesses can win. citeturn19view5turn20view0&lt;/p&gt;

&lt;p&gt;Second, budgets are moving decisively toward applications. Menlo estimates the application layer captured $19 billion of enterprise generative AI spending in 2025, more than half the total, and coding alone represented $4.0 billion of departmental AI spend. Menlo also found that enterprises now prefer buying to building: 76% of AI use cases were purchased in 2025, versus an almost even split in 2024. Founders should read that as a distribution and packaging opportunity, not proof that in-house AI teams do not matter. citeturn29view0&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pie showData
    title 2025 Enterprise Generative AI Spend
    "Application layer" : 19
    "Other layers" : 18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Menlo’s estimate that the application layer accounted for $19 billion of $37 billion in enterprise generative AI spend is a strong signal that the most immediate software value is still being captured in products that sit closest to the user and the workflow, not in raw model infrastructure. citeturn29view0&lt;/p&gt;

&lt;p&gt;Third, the agent era is raising the bar for product design and governance. McKinsey found 62% of organizations were at least experimenting with AI agents by late 2025, and Gartner projected that task-specific agents would spread rapidly into enterprise applications by 2026. At the same time, Stanford’s AI Index warns that investment and capabilities are accelerating faster than governance and measurement frameworks. That means “agentic” is not a moat by itself; the moat is safe orchestration, grounded context, and measurable business outcomes. citeturn20view0turn0search6turn19view0&lt;/p&gt;

&lt;h2&gt;
  
  
  Business models, pricing, and case studies
&lt;/h2&gt;

&lt;p&gt;The most resilient 2026 business model is usually a &lt;strong&gt;hybrid monetization stack&lt;/strong&gt;: a base software subscription, optional premium AI add-ons where governance or specialization matters, and measured usage for expensive or autonomous workflows. Pure seat-based pricing works best when AI is lightweight and broadly used. Pure consumption works best when the customer already understands unit economics. Most companies should avoid copying API-style pricing blindly and instead price around the customer’s scarce unit of value: a developer seat, a workflow, a resolved case, a converted lead, or a high-intent research task. This synthesis reflects what we see in GitHub, Zoom, ServiceNow, Atlassian, and Duolingo. citeturn24view4turn24view9turn24view2turn25view0turn24view5turn19view4&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;th&gt;Advantage&lt;/th&gt;
&lt;th&gt;Primary risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bundled AI in core plans&lt;/td&gt;
&lt;td&gt;Collaboration and suite products&lt;/td&gt;
&lt;td&gt;Drives adoption fast and defends the base product&lt;/td&gt;
&lt;td&gt;Hidden inference costs if usage spikes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seat + usage credits&lt;/td&gt;
&lt;td&gt;Developer tools and power-user workflows&lt;/td&gt;
&lt;td&gt;Aligns margin with higher-intensity workloads&lt;/td&gt;
&lt;td&gt;Billing complexity can slow adoption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium AI add-on&lt;/td&gt;
&lt;td&gt;Enterprise workflow products&lt;/td&gt;
&lt;td&gt;Best for governance, ROI proofs, and upsell&lt;/td&gt;
&lt;td&gt;Requires strong sales enablement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freemium + premium AI tier&lt;/td&gt;
&lt;td&gt;Prosumer and consumer education/productivity&lt;/td&gt;
&lt;td&gt;Expands funnel and converts power users&lt;/td&gt;
&lt;td&gt;High support and compute costs at scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outcome-based automation&lt;/td&gt;
&lt;td&gt;Narrow, high-value workflows&lt;/td&gt;
&lt;td&gt;Strongest ROI narrative&lt;/td&gt;
&lt;td&gt;Harder contracting and measurement&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This comparison synthesizes current market patterns visible in Zoom’s no-extra-cost AI bundling, GitHub’s seat-plus-credit plans and 2026 usage-based extension, ServiceNow’s premium AI ACV growth, Atlassian’s Rovo bundle-plus-standalone pricing, and Duolingo’s freemium-to-premium conversion strategy. citeturn24view2turn24view3turn24view4turn24view9turn25view0turn24view0turn24view5turn19view4&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; is the clearest lesson in category creation and monetization evolution. Microsoft said in May 2025 that 15 million developers were already using GitHub Copilot; GitHub later reported that Copilot code review usage had grown 10x and accounted for more than one in five code reviews on GitHub. GitHub’s organization plans are seat-based, but in 2026 the company extended usage-based billing for heavier workloads. Lesson: start with simple adoption pricing, then add consumption when agents materially increase variable cost and delivered value. citeturn24view7turn24view8turn24view4turn24view9&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ServiceNow&lt;/strong&gt; shows how to sell AI as governed enterprise workflow expansion rather than as a generic assistant. Its 2025 annual-report disclosures said Now Assist surpassed $600 million in ACV in 2025 and aimed to exceed $1 billion ACV in 2026; Q1 2026 results said customers spending more than $1 million in ACV on Now Assist grew more than 130% year over year. Lesson: premium AI monetizes best where the software already owns approvals, workflows, and compliance-sensitive operations. citeturn5search2turn24view0&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zoom&lt;/strong&gt; demonstrates the strategic logic of bundling. Zoom repeatedly emphasized that AI Companion remains available at no additional cost for paid Zoom Workplace accounts, while also launching customization and bring-your-own-data paths. Lesson: if AI strengthens the core suite, protects retention, and creates a future add-on market, bundling can be smarter than immediate monetization. citeturn24view2turn24view3&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duolingo&lt;/strong&gt; is a useful reminder that AI should expand supply, not just trim labor. The company reported 12.2 million paid subscribers and 52.7 million DAUs as of Q4 2025, and said AI let it publish 20,500 skills in Q1 2026 versus 7,100 per quarter in 2025 and 1,800 in 2024. Even while expanding higher-cost AI features, it reported Q2 2025 gross margin of 72.4%, with lower-than-expected AI costs helping margins. Lesson: the best AI businesses use automation to widen their content or service frontier while protecting monetization and margin. citeturn19view4turn26view0turn26view1turn30view1turn30view2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atlassian&lt;/strong&gt; shows why the context layer matters. By late 2025, Atlassian said Rovo had rolled out to every paying cloud customer at no extra cost, that AI usage had more than doubled across its customer base, and that a standalone Rovo offer was coming at $5 per user. Its FY26 investor forum materials also highlighted faster ARR growth among customers using Rovo, while its GA MCP server emphasized admin controls, auditability, and open connectivity to external AI clients. Lesson: in the deep-research era, the product that wins is the one with the best permissions-aware knowledge graph, not merely the best chat box. citeturn24view5turn12search0turn24view6&lt;/p&gt;

&lt;h2&gt;
  
  
  Product strategy and AI integration
&lt;/h2&gt;

&lt;p&gt;A robust 2026 product strategy starts with a narrow wedge: one painful, frequent, expensive workflow where the product can prove a measurable before-and-after delta. The second design rule is architectural: separate the &lt;strong&gt;system of record&lt;/strong&gt;, the &lt;strong&gt;retrieval and data layer&lt;/strong&gt;, the &lt;strong&gt;orchestration layer&lt;/strong&gt;, and the &lt;strong&gt;execution layer&lt;/strong&gt;. For dynamic knowledge tasks, retrieval-augmented generation remains the default because it improves updateability and provenance; for action-taking systems, tool use matters because model quality alone is not enough. The original RAG paper explicitly frames explicit memory as a way to improve factuality and update knowledge, and Toolformer formalizes model use of external tools and APIs. citeturn16search16turn23view4&lt;/p&gt;

&lt;p&gt;The technical stack most founders should assemble looks like this: a product event and application database; a permissions-aware retrieval index over first-party content; model routing across at least a small, fast model and a stronger reasoning model; prompt and workflow versioning; offline eval sets; online experimentation; audit logs; and policy controls for data handling and action execution. The warning from Google’s “Hidden Technical Debt in Machine Learning Systems” still applies: in ML systems, complexity compounds silently, which is why prompt chains, retrieval adapters, evaluation code, and fallback logic must be treated as first-class production assets. citeturn23view2turn16search3&lt;/p&gt;

&lt;p&gt;Safety and explainability are not “governance extras”; they are product features. NIST’s AI RMF defines trustworthy AI in terms that include validity, safety, security, transparency, explainability, privacy enhancement, and fairness, and organizes execution around GOVERN, MAP, MEASURE, and MANAGE. For LLM applications specifically, OWASP’s current guidance highlights prompt injection, insecure output handling, data poisoning, denial of service, supply-chain issues, and sensitive-information disclosure as core design risks. A production product should therefore show sources when possible, constrain tool permissions, sandbox actions, support human approval for high-impact steps, and log what the model saw, inferred, and executed. citeturn23view0turn23view1&lt;/p&gt;

&lt;p&gt;Evaluation also needs to be tougher in 2026 than “the demo looked good.” SWE-bench and SWE-bench Verified matter beyond coding because they illustrate the broader point: realistic AI evaluation requires messy, long-context, multi-step tasks and human-validated benchmarks, not just synthetic prompts. In practice, that means every software company should maintain a living eval suite for its own top workflows: grounding accuracy, task completion, latency, safety violations, action reversals, and user acceptance. citeturn23view5turn23view6&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI delivery checklist&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tie every AI feature to a single workflow KPI before launch.
&lt;/li&gt;
&lt;li&gt;Default to retrieval and tools before fine-tuning.
&lt;/li&gt;
&lt;li&gt;Ship citations, audit logs, and approval gates early.
&lt;/li&gt;
&lt;li&gt;Version prompts, policies, and eval sets like code.
&lt;/li&gt;
&lt;li&gt;Track gross-margin impact per account, not just global token spend.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Go-to-market, legal, organization, and operations
&lt;/h2&gt;

&lt;p&gt;Go-to-market in 2026 should sell &lt;strong&gt;workflow economics&lt;/strong&gt;, not abstractions. McKinsey’s data show that cost benefits are most often reported in software engineering, manufacturing, and IT, while revenue gains are most often reported in marketing and sales, strategy and finance, and product or service development. The same research shows that high performers redesign workflows and set growth or innovation objectives alongside efficiency. So the best sales motion is a short, instrumented value proof with baseline metrics, redesigned process steps, and a buyer-visible dashboard of time saved, quality improved, or revenue unlocked. citeturn20view0&lt;/p&gt;

&lt;p&gt;On pricing, founders should think in layers. Bundle lightweight assistance that improves core retention. Sell governed or specialized AI as a premium add-on. Add usage pricing only where autonomous or high-volume workloads create real variable cost or outsized customer value. GitHub’s shift toward usage-based billing for heavier Copilot workloads is a good signal that agentic features eventually need economic separation, while Zoom and Atlassian show the complementary logic of broad AI bundling to accelerate adoption and defend the suite. citeturn24view9turn24view2turn24view5&lt;/p&gt;

&lt;p&gt;Legally, privacy and AI compliance now have to be designed in from day one. If you process personal data, GDPR applies in the EU, and California’s CCPA gives consumers rights over personal information collected by businesses. The European Data Protection Board’s December 2024 opinion on AI models addressed anonymity, legitimate interest, and the consequences of unlawful personal-data processing in AI development and deployment. Separately, the EU AI Act entered into force on August 1, 2024; prohibited practices and AI literacy obligations started applying on February 2, 2025; GPAI obligations applied from August 2, 2025; and the Act became broadly applicable on August 2, 2026, with some embedded-product obligations deferred further. For GPAI providers, the Commission’s code of practice centers on transparency, copyright, and safety and security. citeturn15search13turn21view4turn21view3turn21view0turn21view1turn21view2&lt;/p&gt;

&lt;p&gt;Intellectual property remains unsettled enough that you should operate conservatively. The U.S. Copyright Office’s Part 2 report says copyrightability of AI outputs turns on the nature and extent of human contribution and maintains the human-authorship baseline; its Part 3 training report describes ongoing debate and unresolved litigation over the use of copyrighted works in model training. The practical response is not paralysis. It is provenance logs, documented dataset rights, customer contract clarity, output review for high-risk content, and indemnity language you can actually stand behind. citeturn22view1turn22view2turn21view5turn21view6turn22view3&lt;/p&gt;

&lt;p&gt;Organizationally, the best setup is usually a compact cross-functional pod per wedge: a GM or PM, design lead, engineering lead, applied AI engineer, data or ML engineer, platform engineer, and a part-time security/privacy partner, plus a solutions engineer for customer feedback loops. McKinsey reports that software engineers and data engineers are among the most in-demand AI-related roles, that half of AI-using organizations need more data scientists, and that workforce reskilling is increasing. Infrastructure-wise, keep cost discipline through model routing, caching, retrieval optimization, asynchronous work queues, batch jobs, and hard spend guardrails. Ethical risk management should be reviewed monthly at the product-operations level: not only bias and privacy, but also inaccuracy, explainability gaps, over-automation, and customer deception. citeturn19view5turn20view0turn23view0turn23view1&lt;/p&gt;

&lt;h2&gt;
  
  
  A 12–18 month tactical roadmap with milestones and KPIs
&lt;/h2&gt;

&lt;p&gt;The roadmap below assumes a company with an existing core product and a modest product-engineering base. The aim is not to launch ten AI features. It is to create one durable wedge, prove economics, then scale safely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gantt
    title 12–18 Month Roadmap
    dateFormat  YYYY-MM-DD
    axisFormat  %b %Y

    section Foundation
    Select wedge workflow and baseline metrics      :a1, 2026-08-01, 45d
    Data contracts, permissions, logging, eval set  :a2, after a1, 45d

    section First product
    Build RAG + tool orchestration MVP             :b1, 2026-11-01, 60d
    Pilot with design partners                      :b2, 2027-01-01, 60d

    section Commercialization
    Launch paid beta and sales playbook             :c1, 2027-03-01, 60d
    Add premium governance/admin features           :c2, after c1, 60d

    section Scaling
    Model routing, caching, cost controls           :d1, 2027-05-01, 60d
    Expand to second workflow and partner channel   :d2, 2027-07-01, 90d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Milestones and KPIs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the first 90 days, define the wedge and instrument it. The only acceptable launch criteria are a clear benchmark and a clear denominator: time to complete task, resolution rate, acceptance rate, conversion rate, or expansion signal. By month six, the pilot should show both user value and economic viability. By month twelve, the product should have a repeatable sales narrative and a cost envelope. By month eighteen, the company should be able to scale a second workflow without rewriting the platform. This sequencing mirrors what the strongest AI performers do: redesign workflows, scale selectively, and invest behind use cases that already show measurable value. citeturn20view0turn29view0&lt;/p&gt;

&lt;p&gt;A practical KPI stack for 2026 is: activation-to-first-value in under one day for self-serve or under 30 days for enterprise; weekly active teams; net revenue retention; pilot-to-production conversion; model-grounded answer rate; citation coverage on knowledge tasks; human acceptance rate of generated outputs; auto-resolution rate for target workflows; p95 latency; inference cost per active account; gross margin by plan; security or policy incidents; and percentage of workflows with auditable logs. For enterprise AI, a board-level metric that matters more than raw MAUs is &lt;strong&gt;revenue or cost impact per redesigned workflow&lt;/strong&gt;. citeturn20view0turn23view0&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Founder checklist for the next quarter&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick one workflow where the product can own both context and action.
&lt;/li&gt;
&lt;li&gt;Choose a pricing model that maps to customer value, not vendor token pricing.
&lt;/li&gt;
&lt;li&gt;Stand up evals, observability, and privacy reviews before general availability.
&lt;/li&gt;
&lt;li&gt;Require every AI feature to show one adoption KPI and one margin KPI.
&lt;/li&gt;
&lt;li&gt;Treat legal clarity and user trust as growth levers, not overhead.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A short conclusion: the successful software business of 2026 is not an “AI wrapper,” nor a traditional SaaS product with a chatbot bolted onto it. It is a software company that uses AI to turn proprietary context into better decisions, better workflows, and better economics than competitors can match. In a deep-research market, the firms that win will be the ones that are easiest to trust, easiest to prove, and hardest to replace.&lt;/p&gt;

</description>
      <category>software</category>
      <category>business</category>
      <category>aibusiness</category>
      <category>coding</category>
    </item>
    <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>
  </channel>
</rss>
