CodeShot

Onion Architecture در مقابل Clean Architecture

Onion Architecture (معرفی‌شده توسط Jeffrey Palermo) لایه‌ها را به‌صورت حلقه‌های متحدالمرکز با هسته دامنه در مرکز توصیف می‌کند و تأکید زیادی روی Domain Services دارد، در حالی که Clean Architecture (معرفی‌شده توسط Robert C. Martin) نام‌گذاری دقیق‌تری برای لایه Use Cases دارد؛ در عمل هر دو بر یک اصل مشترک استوارند: وابستگی‌ها همیشه باید به سمت مرکز (هسته دامنه) جهت‌گیری کنند، نه برعکس.

ویژگیOnion ArchitectureClean Architecture
معرفی‌کنندهJeffrey PalermoRobert C. Martin
تأکید اصلیDomain ServicesUse Cases
اصل بنیادینوابستگی به سمت مرکزوابستگی به سمت مرکز

کِی از Onion Architecture استفاده کنیم؟

وقتی می‌خواهید تأکید بیشتری روی Domain Services و لایه‌بندی حلقه‌ای کلاسیک با اصطلاحات Palermo داشته باشید.

کِی از Clean Architecture استفاده کنیم؟

وقتی می‌خواهید از اصطلاحات رایج‌تر امروزی (Entities، Use Cases، Interface Adapters) طبق تعریف Robert C. Martin استفاده کنید.

مثال Onion Architecture

// Onion: حلقه‌های متحدالمرکز
Domain Model -> Domain Services ->
  Application Services -> Infrastructure/UI

مثال Clean Architecture

// Clean Architecture: لایه‌های نام‌گذاری‌شده
Entities -> Use Cases ->
  Interface Adapters -> Frameworks & Drivers

اشتباه رایج

اشتباه رایج بحث بی‌پایان درباره «کدام‌یک درست‌تر است» به‌جای تمرکز روی اصل مشترک هر دو (قانون وابستگی به سمت مرکز) است؛ در عمل تفاوت این دو بیشتر در نام‌گذاری لایه‌هاست تا در نتیجه معماری نهایی.

جمع‌بندی

هر دو الگو یک اصل مشترک دارند: هسته دامنه نباید به لایه‌های بیرونی وابسته باشد؛ انتخاب بین این دو بیشتر سلیقه‌ای و مربوط به نام‌گذاری تیم است تا یک تفاوت فنی اساسی.