Clean Architecture یک الگوی معماری نرم افزاری است که هدف آن جدایی وابستگی ها و ارائه روشی ساختاریافته برای طراحی و توسعه سیستم های نرم افزاری است. این الگو توسط «رابرت سی مارتین» معرفی شد که الگو بر اساس اصول (SOLID) طراحی شی گرا است. همچنین باید گفت Clean Architecture مختص اندروید نیست، اما میتواند در پروژههای مختلف توسعه نرمافزار از جمله توسعه اپلیکیشن اندروید استفاده شود.
ایده اصلی پشت clean arthitecture ایجاد یک پایگاه کد ماژولار و قابل نگهداری با سازماندهی کد در لایه ها یا اجزای مجزا است که هر کدام دارای مسئولیت ها و وابستگی های خاص خود هستند. این لایه ها معمولاً عبارتند از:
1. Presentation: لایه Presentation وظیفه رندر کردن رابط کاربری (UI) و مدیریت تعاملات کاربر را بر عهده دارد. در این لایه، Activities، Fragments و Composables درjetpack compose) ) برای UI استفاده می شود. آنها تعریف می کنند که رابط کاربری چگونه به نظر می رسد و چگونه با کاربر تعامل دارد.
و Viewmodels برای مشاهده داده ها استفاده می شود. آنها داده های مربوط به UI را ذخیره و مدیریت می کنند و آن را از اجزای UI جدا نگه می دارند. آنها اغلب LiveData یا State را در Jetpack Compose برای به روز رسانی UI هنگام تغییر داده ها در معرض نمایش می گذارند.
2. لایه داده(Data Layer) : لایه داده وظیفه مدیریت داده ها و تعامل با منابع داده مانند پایگاه داده، API های شبکه و ذخیره سازی محلی را بر عهده دارد.
در لایه داده، مخازن(repositories)مانند پلی بین منابع داده و بقیه برنامه ها استفاده می شود. آنها یک رابط تمیز و سازگار برای دسترسی و ذخیره داده ها ارائه می دهند. مخازن می توانند داده ها را از چندین منبع دریافت کنند و بر اساس منطق تجاری (business logic) تصمیم بگیرند که از کدام منبع استفاده کنند.
3. لایه دامنه(Domain Layer): لایه دامنه حاوی منطق اصلی تجاری و قوانین برنامه است و این لایه مستقل از UI و چارچوب های خارجی ( external frameworks) است. در اینجا نیز از مخازن استفاده می شود و هدف آن پیاده سازی رابط مخزن مورد استفاده در لایه داده است.
Use Caseنیز در این لایه استفاده می شود. Use case ها مسئول پیاده سازی ویژگی های خاص اپلیکیشن هستند. آنها از موجودیت ها و مخازن برای اجرای منطق تجاری و تعریف عملیات سطح بالای برنامه استفاده می کنند. Use case ها اغلب UI-Agnostic هستند و میتوانند در بخشهای مختلف برنامه مجدداً استفاده شوند.
در تصاویر زیر پروژه ای با پیاده سازی Clean Architecture را مشاهده می کنیم:
چرا باید از Clean Architecture در پروژه های خود استفاده کنیم ؟
تعدادی از دلایل مهم برای استفاده ازClean Architecture در پروژههای نرمافزاری عبارتند از:
ماژولاریت(Modularity): Clean Architecture با توجه به اینکه یک پایگاه کد ماژولار را ایجاد می کند عملیاتی چون اضافه کردن، اصلاح یا جایگزینی اجزا را بدون تأثیرگذاری بر سایر قسمت های برنامه آسان تر می کند. این ماژولار بودن قابلیت نگهداری و مقیاس پذیری کد را افزایش می دهد.
تست پذیری: Clean Architecture با جداسازی منطق تجاری از وابستگی های خارجی نوشتن تست های واحد را آسان تر می کند. با استفاده از این معماری شما می توانید هر لایه را به طور مستقل تست کنید، بدون درگیر کردن رابط کاربری تست هایی را برای لایه دامنه بنویسید و منابع داده را در لایه داده برای منطق تجاری تست کنید.
انعطاف پذیری(Flexibility): با جدا نگه داشتن منطق اصلی تجاری از چارچوب ها (frameworks)و کتابخانه های خارجی Clean Architecture به توسعه دهندگان این امکان را می دهد که به طور مستقل فناوری دلخواه خود را انتخاب کنند همچنین جابجایی به پایگاه داده، کتابخانه شبکه یا چارچوب UI دیگر بدون بازنویسی کل برنامه آسان تر است.
Clean Code: Clean Architecture اصول Clean Code را مانند اصل مسئولیت واحد (SRP) و اصل وارونگی وابستگی (DIP) اعمال می کند. این منجر به کدهای تمیزتر، قابل نگهداری می شود.
همکاری بهبود یافته: با یک معماری کاملاً تعریف شده، توسعه دهندگان می توانند ساختار پروژه را بهتر درک کنند و بیشتر با یکدیگر همکاری کنند. همچنین به طور موثر ورود اعضای جدید تیم را آسان می کند.
قابلیت نگهداری طولانی مدت: با کمک Clean Architecture می توانیم مطمئن شویم که پایگاه کد در طول زمان قابل نگهداری باقی می ماند و همچنین زمانی که می خواهیم پروژه را مجدد توسعه دهیم و به روزرسانی کنیم انجام اصلاحات و بهبودها بدون بازنویسی مجدد کد برای ما امکان پذیر است.
در نتیجه استفاده از Clean Architecture میتواند به بهبود توسعه، نگهداری، و تست نرمافزار کمک کند و از مشکلات معماری معمول نرمافزاری جلوگیری کند.
بقیه آموزش های mister developer را می توانید در تلگرام و اینستاگرام دنبال کنید!!