Onion Architecture در مقابل Clean Architecture
Onion Architecture (معرفیشده توسط Jeffrey Palermo) لایهها را بهصورت حلقههای متحدالمرکز با هسته دامنه در مرکز توصیف میکند و تأکید زیادی روی Domain Services دارد، در حالی که Clean Architecture (معرفیشده توسط Robert C. Martin) نامگذاری دقیقتری برای لایه Use Cases دارد؛ در عمل هر دو بر یک اصل مشترک استوارند: وابستگیها همیشه باید به سمت مرکز (هسته دامنه) جهتگیری کنند، نه برعکس.
| ویژگی | Onion Architecture | Clean Architecture |
|---|---|---|
| معرفیکننده | Jeffrey Palermo | Robert C. Martin |
| تأکید اصلی | Domain Services | Use 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
اشتباه رایج
اشتباه رایج بحث بیپایان درباره «کدامیک درستتر است» بهجای تمرکز روی اصل مشترک هر دو (قانون وابستگی به سمت مرکز) است؛ در عمل تفاوت این دو بیشتر در نامگذاری لایههاست تا در نتیجه معماری نهایی.
جمعبندی
هر دو الگو یک اصل مشترک دارند: هسته دامنه نباید به لایههای بیرونی وابسته باشد؛ انتخاب بین این دو بیشتر سلیقهای و مربوط به نامگذاری تیم است تا یک تفاوت فنی اساسی.
