بازگشت به کتابخانهکتابخانه5.4اصول طراحی کد: SOLID و اتصال
طراحی سیستم نرم‌افزاریSYSTEM DESIGNاز صفر تا تسلط
v1.0.0
01مبانی و تصویر بزرگ
02Scalability و ظرفیت
03لایه داده
04Cache، Queue و جریان
05معماری نرم‌افزار
06قابلیت اطمینان و عملیات
07متد طراحی
08Case Study های واقعی
09سیستم‌های توزیع‌شده عمیق
10مهندسی تولید: داده، امنیت و کارایی
11تمرین پیشرفته و کیس‌استادی‌های مکمل
12زیر کاپوت دیتابیس و معماری داده
13وب بلادرنگ و پروتکل‌های مدرن
14سیستم‌های توزیع‌شده پیشرفته
15SaaS ،SRE ،امنیت و شبکه پیشرفته
16طراحی سیستم در عصر AI
17Case Study های تکمیلی
LESSON 5.4فصل ۵معماری نرم‌افزار

اصول طراحی کد: SOLID و اتصال

  • ~۱۰ دقیقه
  • ۴ پرسش
  • متن را انتخاب کن تا هایلایت شود

فرض کن در فروشگاه، یک نفر هم قیمت می‌زند، هم ایمیل تبلیغات می‌فرستد، هم فاکتور PDF می‌سازد. هر بار قالب فاکتور عوض شود، ممکن است قیمت‌گذاری بشکند. اسم این درهم‌تنیدگی Coupling است. شغل درست این است که هر میز یک کار داشته باشد — و آن تمرکز درونی را Cohesion می‌گویند.

معماری کلان روی کد خوب می‌ایستد. دو مفهوم مادر: Coupling را کم کن، Cohesion را زیاد کن. SOLID پنج قاعده عملی برای همین است. اسم‌ها را حفظ نکن؛ شغل هر قاعده را بفهم.

یک میز شلوغ در برابر سه میز تک‌شغله
چپ: یک نفر با صندوق و پاکت و چاپگر — هر تغییر یکی، بقیه را می‌لرزاند. راست: هر میز یک ابزار. همان شغل Coupling کم و Cohesion زیاد؛ همان حرف SOLID.

پنج قاعده، پنج شغل

هر کدام یک دلیل مشخص برای وجود دارند. اگر فقط مخفف را بلدی و شغل را نه، سر کار به کارت نمی‌آید.

SRP
Single Responsibility: هر ماژول یک دلیل برای تغییر. کلاس «کاربر + ایمیل + گزارش» سه دلیل دارد — بشکنش. همان میز شلوغ فروشگاه.
Open/Closed
برای رفتار جدید، کد جدید اضافه کن نه جراحی کد پایدار. شغلش این است که درگاه پرداخت تازه را با یک کلاس تازه بیاوری، نه با دستکاری کلاس قدیمی.
Liskov
زیرکلاس باید هرجا جای والدش بنشیند بدون سورپرایز. اگر متد را override کردی و گفتی «پشتیبانی نمی‌شود»، وراثت دروغ است.
ISP
Interface Segregation: چند قرارداد کوچک بهتر از یک هیولا. مصرف‌کننده فقط آنچه لازم دارد ببیند — نه بیست متدی که به کارش نمی‌آید.
DIP
Dependency Inversion: ماژول سطح بالا به انتزاع تکیه کند نه به پیاده‌سازی. سرویس به Storage وابسته باشد، نه به MySQL. تعویض ابزار بدون جراحی هسته.

همین اصول در مقیاس سرویس‌ها

SOLID فقط مال کلاس نیست. مرز سرویس و قرارداد بین سرویس‌ها همان قواعدند، فقط درشت‌تر.

  • SRP سرویس‌ها = مرز درست Microservices: هر سرویس یک قابلیت کسب‌وکار، یک دلیل برای تغییر.
  • DIP سرویس‌ها = قرارداد API یا Event، نه وابستگی به جزئیات داخلی همدیگر. اگر برای یک فیچر معمولی سه سرویس باید با هم Deploy شوند، مرز غلط است.
  • معماری Hexagonal یا Clean: هسته دامنه در مرکز؛ دیتابیس و وب و صف در حاشیه، پشت Interface. تعویض ابزار بدون جراحی هسته.

به زبان ساده

Coupling را کم کن، Cohesion را زیاد. SOLID پنج قاعده برای همین است؛ در مقیاس سرویس همان قواعد مرز و قرارداد می‌شوند.

مثال واقعی

اگر یک نفر هم قیمت بزند هم ایمیل بفرستد هم PDF بسازد، عوض کردن فاکتور قیمت را می‌شکند. هر میز یک شغل.

دانش‌سنجی

آزمون درس

۴ Q
01
کلاس OrderManager هم قیمت حساب می‌کند، هم ایمیل می‌فرستد، هم PDF می‌سازد. کدام اصل نقض شده؟
02
وابستگی سرویس به Interfaceی به نام PaymentProvider به‌جای کلاس ZarinPal مصداق کدام است؟
03
Coupling کم و Cohesion زیاد یعنی چه؟
04
زیرکلاسی که متد والد را override کرده و exception می‌اندازد «پشتیبانی نمی‌شود»، کدام اصل را می‌شکند؟