CodeShot
Seniorسختی 4 از ۵· در 71٪ مصاحبه‌های این حوزه پرسیده شده

Clean Architecture چیست و جهت وابستگی‌ها در آن چگونه است؟

نشان کردن

پاسخ کوتاه

معماری لایه‌ای که در آن جهت همه وابستگی‌ها به‌سمت داخل (Domain) است و لایه‌های بیرونی مثل دیتابیس و UI جزئیات قابل تعویض محسوب می‌شوند.

پاسخ کامل

چهار لایه معمول: Domain، Application، Infrastructure، Presentation.

قاعده طلایی Dependency Rule است: کد لایه داخلی هرگز نباید چیزی از لایه بیرونی بداند. بنابراین:

  • Domain به هیچ‌چیز وابسته نیست.
  • Application فقط به Domain وابسته است و Interfaceها را تعریف می‌کند.
  • Infrastructure آن Interfaceها را پیاده می‌کند (وابستگی معکوس می‌شود).
  • Presentation به Application و — فقط برای سیم‌کشی DI — به Infrastructure.

نتیجه: تعویض SQL Server با چیز دیگر، یا تعویض Web API با یک Console App، هسته کسب‌وکار را دست‌نخورده باقی می‌گذارد.

مثال کد

// Application — تعریف قرارداد
public interface ICapsuleRepository
{
    Task<Capsule?> GetBySlugAsync(string slug, CancellationToken ct = default);
}

// Infrastructure — پیاده‌سازی
public class CapsuleRepository : ICapsuleRepository { /* Dapper + SP */ }

نکته مهم

این همان چیزی است که تست معماری (NetArchTest) در این پروژه بررسی می‌کند: هیچ ارجاعی از Domain به لایه‌های بالاتر مجاز نیست.

اشتباه رایج

❌ گذاشتن Attributeهای EF Core یا [Table] روی موجودیت‌های Domain — این یعنی Domain به یک فناوری خاص دیتابیس وابسته شده است.