معماری Clean Architecture چیست؟ نحوه پیاده سازی این معماری چگونه است؟
دوستان میخواستم بدونم که دقیقا معماری Clean Architecture چی هست؟ استفاده از این معماری در چه پروژه هایی پیشنهاد میشه و نحوه پیاده سازی این معماری چجوریه؟
کلا یک پروژه با داشتن یک معماری مشخص و خاص با پروژه ای که هیچ گونه معماری نداره چه تفاوتی داره؟
پاسخ هوش مصنوعی
معماری Clean Architecture یک الگو در طراحی نرم افزار است که بر جداسازی نگرانی ها تأکید دارد. هدف این معماری به حداقل رساندن وابستگی بین بخش های مختلف یک برنامه و تسهیل تست پذیری، نگهداری و تغییرات در پروژه است. این ساختمان به طوری طراحی شده است که کد اصلی، مستقل از چارچوب ها، پایگاه داده ها، و دیگر عواملی که ممکن است در پروژه تاثیر بگذارند، باشد.
معماری Clean Architecture معمولاً شامل لایه های زیر است:
- لایه دامنه (Domain Layer): این لایه شامل مدل ها و منطق کسب و کار است.
- لایه کاربردی (Application Layer): این لایه شامل سرویس هایی است که منطق کسب وکار را در اجرای خود به کار می برد.
- لایه رابط کاربری (Interface Layer): این لایه شامل رابط کاربری و تعاملات است.
- لایه زیرساخت (Infrastructure Layer): این لایه شامل پایگاه داده، APIو دیگر منابع خارجی است.
استفاده از این معماری به ویژه در پروژه های بزرگ و پیچیده که نیاز به مقیاس پذیری، نگهداری و تست پذیری دارند، پیشنهاد می شود. با استفاده از این معماری، تیم های توسعه می توانند تغییرات را به راحتی انجام دهند بدون اینکه بر دیگر بخش های سیستم تأثیر بگذارند.
در مورد پیاده سازی، مراحل کلیدی شامل:
- شناسایی نیازهای کسب وکار و مدل سازی دامنه.
- تعریف لایه های مختلف و تعیین ارتباطات بین آن ها.
- استفاده از الگوهای طراحی مناسب برای پیاده سازی هر لایه.
- تست دقیق هر بخش.
تفاوت پروژه های با معماری مشخص با پروژه هایی که هیچ گونه معماری ندارند در مقیاس پذیری، نگهداری و قابلیت تست پذیری است. در پروژه هایی که معماری مشخصی دارند، توسعه دهندگان می توانند با شفافیت بیشتری کار کنند و تغییرات را راحت تر اعمال کنند. همچنین، این پروژه ها به راحتی قابل توسعه و گسترش هستند.
معماری Clean Architecture چیست ؟
خب معماری تمیز یا به عبارتی کدنویسی تمیز یا همون Clean Architecture یا Clean Code به مجموعه ای از قواعد گفته میشه که بهتر هست حین توسعه سیستم رعایت بشه تا کدهایی خواناتر و ساختاری محکتر داشته باشید. اما شاید بخواید بدونید این قواعد چی هستن.
قواعد معماری Clean Architecture
قبل از اینکه قواعد معماری تمیز رو بگم باید دقت کنید که این قواعد توسط برنامه نویسان مطرح و بزرگ دنیا پیشنهاد شده و ممکنه در کتابهای مختلف قواعد متفاوتی مطرح شده باشه. اما یکی از برنامه نویسانی که در زمینه معماری تمیز یا Clean Architecture کتابی نوشته و در این زمینه صحبت کرده آقای Bob Uncle (باب آنکل) هست. ایشون در کتابشون در مورد معماری تمیز قواعد زیر رو مطرح می کنن :
- نام گذاری متغیرها به صورت با مفهوم و با مسما باشد. یعنی اگر میخواید متغیری رو تعریف کنید یک نام بی ربط انتخاب نکنید.
- در کدهای خودتون کامنت گذاری کنید اما این کامنت گذاری های باید کوتاه باشد. چون کامنت گذاری طولانی یعنی کد ناخوانا می باشد.
- در کدنویسی تا حد ممکن کارها را دسته بندی کنید و هر دسته را در یک تابع یا متد قرار دهید. به نحوی که برای انجام هر کاری به راحتی بتوان تابع مورد نظر را فراخوانی کرد.
- سعی کنید کلاسهای شما فقط یک کار انجام دهند. این موضوع بسیار پراهمیت می باشد. با یک مثال ساده این قاعده را توضیح می دهم. فرض کنید می خواهید عملیات Insert و Update و Delete را برای یکی از جداول خود ایجاد کنید. بهتر است برای هر کدام از این عملیات یک کلاس مجزا تشکیل دهید و از ایجاد یک کلاس که همه این توابع در آن کلاس تعریف شود خودداری کنید.
- کاهش وابستگی ها در پروژه. کاهش وابستگی ها به این معنی که سعی کنید کلاسهای شما تا حد ممکن وابستگی کمتری به سایر کلاس ها یا Interface های پروژه شما داشته باشند. این موضوع باعث می شود تست پذیری سیستم بهتر شود. در مورد کاهش وابستگی ها توضیه میشه در مورد کتابخانه Mediator در nuget و نحوه استفاده از آن تحقیق کنید.
- استفاده از الگوی CQRS. یکی از الگوهایی که در پیاده سازی معماری تمیز بسیار کارآمد می باشد الگوی CQRS می باشد. به طور خلاصه در این الگو برای هر عملیات مثلا Insert در دیتابیس یک کلاس Handler وجود دارد و یک کلاس هم مدل Handler را تعریف می کند. این الگو در خالص سازی کلاس ها بسیار کارآمد می باشد.
موارد بالا مهمترین خواسته های Clean Architecture می باشند.
پروژه های مدرن از چه معماری استفاده می کنند ؟
در کتاب راهنمای معماری پروژه های مدرن برای پیاده سازی یک پروژه تمیز 5 لایه در نظر گرفته شده است.
- Domain
- Application
- Presentation
- Infrastructure
- Persistence
نکته مهم اینکه لایه در پروژه حتما به این معنی نیست که بایستی برای هر کدام از موارد بالا یک پروژه جداگانه تعریف کرد. اما در حالت ایده آل بهتر است هر کدام از موارد بالا در یک پروژه جداگانه تعریف شود و از بالا به پایین رفرنس دهی انجام شود.
توجه کنید در معماری تمیز نیازی به استفاده از لایه Service و Repository ها نیست. چون اصولا هر عملیاتی در کلاس مخصوص به خود انجام می شود و CommandModel خاص خود را دارد.
کاربرد لایه Domain در معماری Clean Architecture
این لایه درونی ترین لایه پروژه می باشد و در مرکز هسته نرم افزار قرار دارد. تعاریف دیتابیس و ساختار دیتابیس و جداول در این لایه قرار می گیرد.
کاربرد لایه Application در معماری Clean Architecture
در این لایه قواعد دیتابیس و پروژه، سرویس های مورد نیاز،اعتبارسنجی داده ها و عملیات ذخیره و بازیابی اطلاعات انجام می شود.
کاربرد لایه Presentation در معماری Clean Architecture
همان طور که از نام این لایه مشخص است در این لایه UI پروژه و دستورات اصلی برنامه قرار می گیرد. در واقع پروژه اصلی شما در این لایه قرار دارد.
کاربرد لایه Infrastructure در معماری Clean Architecture
هر چیزی که در سایر لایه ها جایگاهی ندارد در این لایه جایگذاری می شود. مثلا ایجاد سرویس های ارسال ایمیل یا پیامک، متغیرهای سراسری و ...
کاربرد لایه Persistence در معماری Clean Architecture
شاید پیاده سازی این لایه زیاد ضروری نیست چون کاربرد این لایه در لایه Application تعریف شده است. اما برخی از ساختاریهای دیتابیس و یا تغییرات دیتابیسی را می توان در این لایه قرار داد. (این لایه استفاده های خاص دارد)
البته همان طور که در بالاتر هم گفته شد در کتاب های مختلف ممکن است لایه بندی ها و یا قواعد متفاوتی ذکر شده باشد. شما می توانید فیلم زیر رو که در مورد انواع معماری های نرم افزاری خصوصا معماری DDD می باشد رو مشاهده کنید. این فیلم مربوط به دوره آموزشی اتوماسیون اداری تحت وب با Asp.net Core 3.1 می باشد.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2