معماری Clean Architecture چیست؟ نحوه پیاده سازی این معماری چگونه است؟
دوستان میخواستم بدونم که دقیقا معماری Clean Architecture چی هست؟ استفاده از این معماری در چه پروژه هایی پیشنهاد میشه و نحوه پیاده سازی این معماری چجوریه؟
کلا یک پروژه با داشتن یک معماری مشخص و خاص با پروژه ای که هیچ گونه معماری نداره چه تفاوتی داره؟
معماری 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 می باشد.
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2