CodeShot

Entities (هسته دامنه) در مقابل Use Cases (لایه Application)

Entities در Clean Architecture در مرکزی‌ترین لایه قرار دارند و قوانین کسب‌وکار کاملاً مستقل از هر برنامه خاص را در خود دارند (مثل قانون «سفارش زیر ۱۰۰ هزار تومان هزینه ارسال دارد»)، در حالی که Use Cases (لایه Application) قوانین مخصوص یک عملیات خاص برنامه را هماهنگ می‌کنند و از Entities برای انجام یک سناریوی مشخص (مثل «ثبت سفارش جدید») استفاده می‌کنند.

ویژگیEntities (هسته دامنه)Use Cases (لایه Application)
موقعیت در لایه‌بندیمرکزی‌ترین لایهیک لایه بیرون‌تر از Entities
نوع قانونهمیشگی و بنیادینمخصوص یک سناریوی برنامه
وابستگیبه هیچ لایه‌ایبه Entities

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

وقتی قانونی کاملاً بنیادین و همیشگی کسب‌وکار است که مستقل از این‌که برنامه وب باشد یا موبایل، همیشه صادق است.

کِی از Use Cases (لایه Application) استفاده کنیم؟

وقتی می‌خواهید یک جریان کاری مشخص برنامه (مثل «ثبت سفارش» یا «لغو اشتراک») را با هماهنگی چند Entity و سرویس پیاده‌سازی کنید.

مثال Entities (هسته دامنه)

// Entity: قانون همیشگی دامنه
public class Order
{
    public decimal CalculateShipping()
        => Total < 100_000 ? 15_000 : 0;
}

مثال Use Cases (لایه Application)

// Use Case: هماهنگی یک سناریوی مشخص برنامه
public class PlaceOrderUseCase
{
    public async Task Execute(PlaceOrderCommand cmd)
    {
        var order = new Order(cmd.Items);
        await _repository.SaveAsync(order);
    }
}

اشتباه رایج

اشتباه رایج نوشتن منطق هماهنگی مخصوص یک عملیات (مثل ارسال ایمیل تأیید بعد از ثبت سفارش) مستقیماً داخل کلاس Entity است؛ این کار Entity را به جزئیات یک سناریوی خاص وابسته می‌کند، در حالی که این نوع هماهنگی باید در لایه Use Case باشد.

جمع‌بندی

قوانین بنیادین و همیشگی کسب‌وکار را در Entities و هماهنگی سناریوهای مشخص برنامه را در Use Cases (لایه Application) نگه دارید تا هسته دامنه خالص و مستقل باقی بماند.