> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/design-principles/dry-design-principle.md).

# DRY Design Principle

Software development-এ যখন আমরা বড় project লিখি, তখন সবচেয়ে বড় চ্যালেঞ্জগুলোর একটি হলো কোডকে clean, maintainable, আর scalable রাখা। যদি একই logic বারবার বিভিন্ন জায়গায় লেখা হয়, তা শুধু messy হয় না, বরং bug fix বা নতুন feature add করা কঠিন করে দেয়। এই সমস্যার সমাধান এসেছে **DRY Principle** দ্বারা।

### DRY Principle কী?

**DRY = Don't Repeat Yourself**\
এটি একটি software design principle যা বলে:

> একই logic বা information multiple জায়গায় duplicate করা ঠিক নয়। একবার define করলেই কাজ হবে

ধরে নাও, তুমি এক্সাম এর জন্য নোটস বানাচ্ছ। তুমি যদি প্রতিটা বিষয় বিভিন্ন জায়গায় আলাদা করে লিখে ফেলো, তাহলে ছোট একটা change করলে সব জায়গায় update করতে হবে। কিন্তু যদি তুমি centralized একটা summary বানাও এবং সব জায়গা থেকে সেই summary refer করো, তাহলে একবার update করলেই সব ঠিক হয়ে যাবে।

একই concept কোডিং-এই প্রযোজ্য।

***

### Bad Example

ধরা যাক, আমাদের একটি website-এ multiple page-এ user age check করতে হবে।

{% code lineNumbers="true" %}

```php
// Page 1
$age = 20;
if ($age >= 18) {
    echo "You are an adult.";
} else {
    echo "You are a minor.";
}

// Page 2
$age = 16;
if ($age >= 18) {
    echo "You are an adult.";
} else {
    echo "You are a minor.";
}
```

{% endcode %}

এখানে একই logic দুই জায়গায় repeat হয়েছে।

**সমস্যা:**

* যদি future-এ rule change করতে হয়, যেমন age 21 হলে adult ধরা হবে, তাহলে দুই জায়গাতেই update করতে হবে।
* Error prone, maintain করতে কষ্ট।

***

### Good Example

DRY মানার জন্য আমরা common logic কে একটা **function** বা **method** এ রাখি।

{% code lineNumbers="true" %}

```php
function checkAdult($age) {
    if ($age >= 18) {
        return "You are an adult.";
    } else {
        return "You are a minor.";
    }
}

// Page 1
echo checkAdult(20);

// Page 2
echo checkAdult(16);
```

{% endcode %}

**Advantages:**

* Logic centralize হয়ে গেছে।
* একবার function update করলে সব জায়গায় automatically change হবে।
* Code cleaner, maintainable, এবং scalable।

***

### DRY Principle এর Benefits

1. Maintainability: Bug fix বা updates সহজ।
2. Readability: Cleaner এবং understandable code।
3. Reusability: একবার লেখা logic multiple places reuse করা যায়।
4. Consistency: একই logic সব জায়গায় একই ভাবে কাজ করে।

***

### Short Tips for Practicing DRY

* Repeated code দেখলেই function/method/class এ move করো।
* Configuration, constants, templates কে centralize করো।
* ORM/Framework ব্যবহার করলে database logic duplicate এড়াও।
* Code review এবং refactoring এ DRY check করো।

***

DRY principle মানা মানে শুধু elegant কোড লেখা নয়, বরং future-proof, scalable এবং bug-free software তৈরি করা। DRY না মানলে duplicate code, maintenance nightmare, এবং inconsistent behavior দেখা দেয়।

**DRY মানার সময় over-abstraction এড়াতে হবে**। সবকিছু centralize করতে গিয়ে complexity বেড়ে গেলে কাজের ক্ষতি হতে পারে।
