🧅 معماری Onion در برابر 🧼 معماری Clean؛ تفاوت در چیست؟
هر دو معماری حول یک ایدهی مشترک شکل گرفتهاند:
• جهت وابستگیها به سمت مرکز است.
• هستهی سیستم شامل موجودیتهای دامنه (Domain Entities) و قوانین کسبوکار (Business Rules) است.
• هستهی سیستم باید از هرگونه وابستگی به مسائل خارجی مستقل باشد.
ایدهی اصلی در اینجا کنترل Coupling (وابستگی) است.
موجودیتهای دامنه و قوانین کسبوکار در مرکز سیستم قرار دارند. آنها به هیچ چیز وابسته نیستند و این موضوع ارزشمند است، زیرا باعث میشود پایدار باقی بمانند. اجزای اطراف Domain ممکن است تغییر کنند، اما این تغییرات نباید روی موجودیتهای دامنه یا قوانین کسبوکار تأثیر بگذارند.
به خاطر داشته باشید که Coupling به میزان وابستگی متقابل بین ماژولها و کامپوننتهای یک سیستم گفته میشود.
هر دو معماری Clean و Onion تلاش میکنند به اهداف یکسانی برسند، اما با رویکردی کمی متفاوت.
در هر دو، لایهی Domain وجود دارد.
در Clean Architecture، هسته شامل Use Caseها است، در حالی که در Onion Architecture، از Domain Services و Application Services استفاده میشود.
در بیرونیترین لایه نیز دغدغههای مربوط به Infrastructure قرار میگیرند.
هر تفاوتی که میان این دو مشاهده میکنید، زمانی که نوبت به پیادهسازی آنها در یک پروژه واقعی میرسد، به سرعت کمرنگ میشود؛ که این موضوع کاملاً طبیعی است، زیرا هر دو در حال پیادهسازی مجموعهای از اصول یکسان هستند.
عامل مهم دیگری که باید به آن توجه کنید Cohesion (انسجام) است. Cohesion به میزان ارتباط و هماهنگی اجزای داخلی یک ماژول (کلاس، تابع، کامپوننت و...) برای انجام یک هدف مشخص و واحد گفته میشود.
در واقع، همین مفهوم مهمترین نیروی محرک Vertical Slice Architecture محسوب میشود.