راز نوشتن کدهای تمیز و قابل نگهداری - SOLID Principles
Вставка
- Опубліковано 5 сер 2024
- در این ویدیو، به سراغ اصول SOLID میرویم که مجموعهای از قوانین و بهترین روشها برای طراحی شیءگرا هستند. با یادگیری و پیادهسازی این اصول، میتوانید کدهایی تمیز، قابل نگهداری و قابل توسعه بنویسید.
SOLID مخفف کلمات زیر است:
Single Responsibility Principle (اصل تک مسئولیت)
Open-Closed Principle (اصل باز-بسته)
Liskov Substitution Principle (اصل جایگزینی لیستکوف)
Interface Segregation Principle (اصل جداسازی رابط)
Dependency Inversion Principle (اصل وارونگی وابستگی)
در این ویدیو، هر یک از این اصول را به طور مفصل شرح خواهیم داد و با استفاده از مثالهای واقعی، نحوه پیادهسازی آنها را در کد به شما نشان خواهیم داد.
این ویدیو برای چه کسانی مناسب است؟
برنامهنویسان شیءگرا که میخواهند کدهای خود را به سطح بالاتری ارتقا دهند.
معماران نرمافزار که به دنبال طراحی سیستمهای قابل توسعه و پایدار هستند.
دانشجویان علوم کامپیوتر که در حال یادگیری مفاهیم بنیادی برنامهنویسی شیءگرا هستند.
با تماشای این ویدیو چه چیزهایی یاد خواهید گرفت؟
نحوه طراحی کلاسهای تمیز و قابل نگهداری
نحوه نوشتن کدهایی که به راحتی قابل تست و اشکالزدایی هستند
نحوه ایجاد سیستمهای قابل توسعه و انعطافپذیر
نحوه استفاده از اصول SOLID برای حل مشکلات رایج طراحی نرمافزار
اگر به دنبال نوشتن کدهای شیءگرای بهتر هستید، این ویدیو را از دست ندهید!
در بخش نظرات، میتوانید سوالات خود را در مورد SOLID Principles مطرح کنید.
00:00 مقدمه
00:23 فلسفه نامگذاری
00:40 Single Responsibility Principle
01:23 Open-Closed Principle
03:08 Liskov Substitution Principle
04:52 Interface Segregation Principle
06:05 Dependency Inversion Principle
08:41 چرا باید استفاده کنیم؟
خیلی ممنون از محتوای خوب تون. جای خالی این سبک محتوای های تخصصی توی کامیونیتی فارسی بشدت حس میشه ممنون از شما که محتوا های با کیفیت میسازید. برای اشنایی با اصول solid این ویدیو خیلی خوب بود.لطفا با جزییات بیشتر و در قالب یه app واقعی این اصول رو بکار بگیرید محشر میشه.
ممنون از لطف شما 🙏
بله. دوستان دیگه هم پیشنهاد داده بودن که با مثالهای واقعی این ۵ تا قانون رو بررسی کنیم. سعی میکنم توی یکی دو هفته آینده ویدیوش رو منتشر کنم و همینجا هم خبر میدم که ببینید.
به نظرم مثال ها فقط برای آشنا شدن و آگاهی از وجود قوانین بود.
اگر بتونید با مثال های دنیای واقعی اندرویدی مثلا توی پروژه فیلم تایم تاثیر سالید در کد ها و آرکیتکچر رو نشون بدید میشه یادش گرفت 😊
پیشنهاد خیلی خوبی بود. میریم براش هر چند که مخاطب زیادی نداره 😄
@@RezaDevs برای من شنیدنش از زبون آدم باسوادی مثل شما خیلی ارزشمنده چون خودم باید مدت ها در موردشون فکر کنم تا درک کنم.
مطمئنا به درد خیلی ها میخوره 🙏🏼
درمورد سوال انتهای ویدیو، توی اندروید context میشه گفت SRP رو نقض کرده به دلیل فانکشنالیتی های مختلفی که داره مثل دسترسی به منابع، جابه جایی بین اکتیویتی ها یا ساختن دیتابیس و ...
بله درسته 👌
ممنون، یه سوال سافتور انجینیر فرقش با توسعه دهنده اندروید چیه؟
از چند جهت میشه بررسی کرد. برای اینکه کلیتر باشه بیایید مقایسه مهندس نرمافزار با توسعهدهنده نرمافزار رو بررسی کنیم:
*از جهت مهارتها:*
مهندس نرمافزار: دانش بیشتری در زمینههای الگوریتمها، ساختار دادهها، طراحی سیستمها، و مفاهیم پیشرفته برنامهنویسی داره.
توسعهدهنده نرمافزار: بیشتر بر روی مهارتهای برنامهنویسی عملی و استفاده از فریمورکها و ابزارهای خاص برای پیادهسازی
پروژههای نرمافزاری تمرکز داره (توی سوال شما میشه تخصصش بیشتر اندروید هست)
*از جهت مسئولیتها:*
مهندس نرمافزار: مسئولیتهای بیشتری در تحلیل نیازمندیها، طراحی معماری سیستم، و تضمین کیفیت نرمافزار داره.
توسعهدهنده نرمافزار: بیشتر بر روی توسعه و پیادهسازی ویژگیها و رفع باگها تمرکز دارد و معمولاً درگیر کدنویسی و تست نرمافزار هست.
*جمعبندی:*
مهندس نرمافزار: کارش طراحی، توسعه، آزمایش و نگهداری سیستمهای نرمافزاری پیچیده هست. مسائل معماری سیستم و زیرساختها رو بلده و بیشتر وقتها از اصول مهندسی برای اطمینان از کیفیت، قابلیت اتکا بودن و مقیاسپذیری سیستمها استفاده میکنه.
توسعهدهنده نرمافزار: بیشتر به کدنویسی و پیادهسازی ویژگیها مشغوله و معمولاً مسئولیتهای کمتری در زمینه طراحی سیستمهای بزرگتر دارن.
@@RezaDevs خیلی ممنون
درود در مورد solid ویدیو انگلیسی و فارسی زیاد دیدم ولی این ویدیو به نظرم شیوا و ساده تر توضیح داده شده بود
و یه سوال اخر ویدیو گفتید تنها چیزی که خیلی به ذهنم رسید کلاس viewmodel هست 😁😁
ممنون از لطف شما 🙏
در مورد سوالی که پرسیده بودم هم ویومدل کلاسی هست که چند سال اخیر اضافهاش کردن و از لحاظ تک وظیفهای بودن اتفاقا کارش درسته و فقط داره یک کار انجام میده 😄
@@RezaDevs
ممنونم بابت پاسخ
ولی چرا ویومدل کلاس من همه کار میکنه
😁😁😁😁😁😁
یک سوال در مورد تاریخ میتونم بپرسم
یه مشکلی دارم وقتی یه تاریخ میلادی رو با لایبراری موجود تبدیل میکنم به هجری و قمری بین این دوتا تاریخ(قمری و شمسی ) یک روز اختلاف هست البته میدونم یه ماه های خاص هست مثل زمضان ولی این مشکل برای ماه های دیگه هم هست و من راه منطقی پیدا نکردم
شاید سوال رو خوب دقت نکردید. پرسیده بودم توی اسدیکی خود اندروید چه کلاسی ایراد داره. کلاس ویومدلی که خود اندروید معرفی کردند یه کلاس ابسترکت هست که فقط داره لاجیک مربوط شدن به کلیر شدن ویومدل رو هندل میکنه و از این نظر کارش محدود به مفهوم ویومدل هست. اینکه ما توی برنامهمون ویومدلی میسازیم که کلی کار انجام میده اون میشه مشکل ویومدل ما که با اصل تک وظیفه بودن سازگار نیست. (که از این جهت میشه گفت شما درست اشاره کردید)
در مورد تاریخ قمری: تا بوده همین مشکل بوده. اگر دقت کنید یه سری برنامههای غیر آنلاین توی تنظیماتشون یه گزینه میذارن که کاربر دستی تاریخ قمری رو یک تا حتی سه روز بتونه عقب جلو بکنه تا درست دربیاد. برنامههای آنلاین هم که میتونن با سرور چک کنن و تبدیل تاریخ رو از اونجا بگیرن یا یک ای پی آیی که معتبر هست.
@@RezaDevs
در مورد اول شوخی کردم 😁😁
ولی بازم خیلی ممنون که توضیح دادید زیبا و شیوا بود
در مورد سوال بعدیم
پس اینجوریه فکر میکردم من پیدا نکردم راه حلی
یه سوال کوجیک دیگه این مورد اختلاف تاریخ ثابت نیست
درسته؟ یعنی تو هر سال تغییر میکنه؟
بازم ممنونم که با حوصله پاسخ میدید
بله. ثابت نیست. همونطور که خودتون سر ماه رمضان میدونید، چون با چشم باید ماه روئیت بشه ممکنه تعداد روزهای ماه تغییر بکنه و برای همین محاسبات اون سال همه یک روز شیفت میشه جلو یا عقب.
شما به عنوان یه متخصص اندروید ایا اینکارو تایید میکنید ؟منه تازه کار برای اینکه دانشم بیشتر بشه برم و سورس کامپوز رو تیکه تیکه بخونم به 2 دلیل : 1- بهتر شدن کد زدنم در کاتلین 2 - درک بهتر از ui در اندروید
کلا خوندن سورس کد دیگران خیلی کمک میکنه برای اینکه بیشتر یاد بگیریم و با دست خط دیگران هم آشنا بشیم. اگر نمونه کدهای کامپوز که توسط خود گوگل نوشته شده رو بخونید که چه عالی
پیشنهاد میکنم یه نگاهی هم به این ریپازیتوری خود گوگل بندازید:
github.com/android/sunflower