2.2.9 · HinglishDesign Principles

Separation of concerns

1,921 words9 min readRead in English

2.2.9 · Coding › Design Principles


YE principle exist kyun karta hai?

Ek concern problem ka koi bhi aisa distinct aspect hai jiske baare mein aapko parwah hai — jaise "data kaise store hota hai", "prices kaise calculate hote hain", "screen kaisi dikhti hai". Separation ka ulta hai tangling (ek module kai concerns karna) aur scattering (ek concern kai modules mein failna).


HUM exactly kya separate kar rahe hain?

Do measurable forces batati hain ki aap succeed hue ya nahi:

Ye dono saath kyun? Kyunki aap akele ek ko cheat kar sakte ho:

  • Sab kuch ek giant function mein daalo → modules ke beech coupling zero hai (ek hi module hai!) lekin cohesion terrible hai.
  • 50 tiny modules mein split karo jo sab ek doosre ko call karte hain → cohesion high lagti hai lekin coupling explode ho jaati hai. SoC aapko dono jeetnе ke liye kehta hai concerns ke natural seams pe cut karne se.

Figure — Separation of concerns

Concerns actually kaise separate karte hain?

Ek practical 3-step recipe:

  1. Change ke reasons list karo. Pucho: "Kaun mujhse ye edit karwaega, aur kyun?" Har distinct jawab ek concern hai. (Ye literally Single Responsibility Principle disguise mein hai.)
  2. Reason se group karo, data se nahi. Jo code saath change hota hai woh saath rehta hai; jo code alag-alag reasons se change hota hai woh alag ho jaata hai.
  3. Ek boundary insert karo (ek function, class, module, ya layer) taaki parts ek narrow interface ke through baat karein, apne internals chupaate hue.

Common mistakes (steel-manned)


Active recall

Recall Ek "concern" kya hai, aur uska cleanest test kya hai?

Concern = change ka ek reason. Test: "Kaun mujhse ye edit karwaega, aur kyun?" Har distinct jawab ek separate concern hai.

Recall Coupling minimize karo AUR cohesion maximize karo, sirf ek nahi — kyun?

Akele kisi ek ko optimize karna gameable hai: ek giant module = zero module-coupling lekin cohesion koi nahi; kai tiny chatty modules = "high cohesion" lekin exploding coupling. SoC dono jeetta hai natural concern boundaries pe cut karke.

Recall Cross-cutting concern kya hota hai aur ise kaise separate karte hain?

Ek concern (logging, auth, error handling) jo kai modules ko touch karta hai. Decorators/middleware/aspects ke zariye separate kiya jaata hai taaki business logic clean rahe.

Recall (Feynman, age 12) Ise simply explain karo.

Sochो ek kitchen jahan ek insaan ek saath kaatata, pakaata, plate karta, aur bartan dhoota hai — jab recipe change hoti hai, toh woh confused ho jaata hai aur khana jala deta hai. Separation of concerns matlab har kaam ek alag insaan ko dena: kaatne wala sirf kaata hai, pakaane wala sirf pakata hai. Ab agar aap dish change karo, sirf cook kuch naya seekhta hai — baaki sab apna simple kaam karte rehte hain. Software bhi aisa hi hai: code ke har piece ko ek kaam do taaki ek cheez change karne se sab kuch nahi toote.


Flashcards

Separation of Concerns ka matlab hai ki har module handle karta hai
ek concern (change ka ek reason), doosron ke saath minimal overlap ke saath.
Ek "concern" ko best define kiya jaata hai
change ka ek single reason / ek cohesive responsibility.
Do metrics jo good SoC indicate karte hain
low coupling aur high cohesion.
Coupling measure karta hai
kitne doosre modules par ek module depend karta hai (LOW chahiye).
Cohesion measure karta hai
ek module ke elements kitne focused hain ek concern par (HIGH chahiye).
Hum coupling AUR cohesion dono saath optimize kyun karte hain
dono akele gameable hain; SoC dono achieve karta hai natural concern boundaries pe cut karke.
Tangling (anti-pattern) ka matlab hai
ek module kai concerns mix karna.
Scattering (anti-pattern) ka matlab hai
ek concern kai modules mein failna.
Cross-cutting concern hota hai
ek concern (logging, security, error handling) jo kai modules mein spread hota hai.
Cross-cutting concerns separate kiye jaate hain
decorators, middleware, ya aspect-oriented programming se.
Layered architecture mein dependencies point karni chahiye
ek direction mein (presentation → domain → data).
Good separation ka sabse quick practical test
ek typical change ideally ek hi jagah edit karna require kare.
SoC, SRP se relate karta hai kyunki
SRP, SoC ko class level par apply karta hai (ek class = change ka ek reason).
SoC mein "ek cheez" ka matlab hai
change ka ek reason, NA ki ek line/ek tiny function.

Connections

  • Single Responsibility Principle — SoC ek single class/module par apply hota hai.
  • Coupling and Cohesion — good SoC ka measurable outcome.
  • Layered Architecture — SoC horizontal layers ke roop mein realize hota hai.
  • Cross-cutting concerns — jo concerns simple layering se resist karte hain.
  • Modularity — broader goal jisko SoC serve karta hai.
  • Don't Repeat Yourself (DRY) — SoC ke saath pair karta hai; har concern ka ek ghar hota hai.
  • Information Hiding — woh boundary jo separation ko hold karvati hai.

Concept Map

motivates

splits program by

fights

fights

aims for

aims for

measured as

measured as

equivalent to

applied via

inserts

enables

Human limited memory

Separation of Concerns

Concern one reason to change

Tangling one module many concerns

Scattering one concern many modules

Low coupling

High cohesion

Measured result

Single Responsibility Principle

3-step recipe

Narrow interface boundary

Change stays local