CodeShot

Coupling (وابستگی/جفت‌شدگی) در مقابل Cohesion (انسجام)

Coupling میزان وابستگی یک ماژول به جزئیات داخلی ماژول‌های دیگر را نشان می‌دهد که هرچه کمتر باشد بهتر است، در حالی که Cohesion میزان مرتبط و هم‌هدف بودن اعضای داخل یک ماژول را نشان می‌دهد که هرچه بیشتر باشد بهتر است؛ هدف اصلی معماری خوب رسیدن به Coupling کم و Cohesion بالا به‌طور همزمان است.

ویژگیCoupling (وابستگی/جفت‌شدگی)Cohesion (انسجام)
اندازه‌گیریوابستگی بین ماژول‌هاارتباط داخل یک ماژول
مقدار مطلوبکمزیاد
ابزار بهبودInterface، DI، پیام‌رسانیاصل تک‌مسئولیتی (SRP)

کِی از Coupling (وابستگی/جفت‌شدگی) استفاده کنیم؟

باید همیشه تلاش کنید آن را کاهش دهید: با استفاده از Interface، تزریق وابستگی و پیام‌رسانی به‌جای فراخوانی مستقیم جزئیات داخلی.

کِی از Cohesion (انسجام) استفاده کنیم؟

باید همیشه تلاش کنید آن را افزایش دهید: هر کلاس یا ماژول باید فقط یک مسئولیت مشخص و مرتبط را در خود جای دهد.

مثال Coupling (وابستگی/جفت‌شدگی)

// Coupling بالا: وابستگی مستقیم به کلاس concrete
public class OrderService
{
    private SqlOrderRepository _repo = new(); // بد
}

مثال Cohesion (انسجام)

// Cohesion بالا: کلاس فقط مسئول یک کار است
public class EmailValidator
{
    public bool IsValid(string email) => ...;
}

اشتباه رایج

اشتباه رایج تمرکز فقط روی کاهش Coupling بدون توجه به Cohesion است؛ می‌توان با تزریق وابستگی، Coupling را کم کرد اما اگر یک کلاس همچنان مسئولیت‌های نامرتبط زیادی داشته باشد (Cohesion پایین)، کد همچنان سخت نگه‌داری خواهد بود.

جمع‌بندی

معماری خوب هم‌زمان به دنبال کاهش وابستگی بین ماژول‌ها (Coupling کم) و افزایش انسجام داخل هر ماژول (Cohesion بالا) است؛ این دو مکمل هم‌اند نه جایگزین.