راز نوشتن کدهای تمیز و قابل نگهداری - 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 چرا باید استفاده کنیم؟

КОМЕНТАРІ • 19

  • @younesmohammadi7363
    @younesmohammadi7363 9 днів тому +1

    خیلی ممنون از محتوای خوب تون. جای خالی این سبک محتوای های تخصصی توی کامیونیتی فارسی بشدت حس میشه ممنون از شما که محتوا های با کیفیت میسازید. برای اشنایی با اصول solid این ویدیو خیلی خوب بود.لطفا با جزییات بیشتر و در قالب یه app واقعی این اصول رو بکار بگیرید محشر میشه.

    • @RezaDevs
      @RezaDevs  8 днів тому

      ممنون از لطف شما 🙏
      بله. دوستان دیگه هم پیشنهاد داده بودن که با مثال‌های واقعی این ۵ تا قانون رو بررسی کنیم. سعی می‌کنم توی یکی دو هفته آینده ویدیوش رو منتشر کنم و همینجا هم خبر می‌دم که ببینید.

  • @mahdiporkar236
    @mahdiporkar236 Місяць тому +2

    به نظرم مثال ها فقط برای آشنا شدن و آگاهی از وجود قوانین بود.
    اگر بتونید با مثال های دنیای واقعی اندرویدی مثلا توی پروژه فیلم تایم تاثیر سالید در کد ها و آرکیتکچر رو نشون بدید میشه یادش گرفت 😊

    • @RezaDevs
      @RezaDevs  Місяць тому +3

      پیشنهاد خیلی خوبی بود. می‌ریم براش هر چند که مخاطب زیادی نداره 😄

    • @mahdiporkar236
      @mahdiporkar236 Місяць тому +1

      @@RezaDevs برای من شنیدنش از زبون آدم باسوادی مثل شما خیلی ارزشمنده چون خودم باید مدت ها در موردشون فکر کنم تا درک کنم.
      مطمئنا به درد خیلی ها میخوره 🙏🏼

  • @Kotlini
    @Kotlini Місяць тому +2

    درمورد سوال انتهای ویدیو، توی اندروید context میشه گفت SRP رو نقض کرده به دلیل فانکشنالیتی های مختلفی که داره مثل دسترسی به منابع، جابه جایی بین اکتیویتی ها یا ساختن دیتابیس و ...

    • @RezaDevs
      @RezaDevs  Місяць тому +1

      بله درسته 👌

  • @mychannel-jb3zk
    @mychannel-jb3zk Місяць тому +1

    ممنون، یه سوال سافتور انجینیر فرقش با توسعه دهنده اندروید چیه؟

    • @RezaDevs
      @RezaDevs  Місяць тому +1

      از چند جهت می‌شه بررسی کرد. برای اینکه کلی‌تر باشه بیایید مقایسه مهندس نرم‌افزار با توسعه‌دهنده نرم‌افزار رو بررسی کنیم:
      *از جهت مهارت‌ها:*
      مهندس نرم‌افزار: دانش بیشتری در زمینه‌های الگوریتم‌ها، ساختار داده‌ها، طراحی سیستم‌ها، و مفاهیم پیشرفته برنامه‌نویسی داره.
      توسعه‌دهنده نرم‌افزار: بیشتر بر روی مهارت‌های برنامه‌نویسی عملی و استفاده از فریم‌ورک‌ها و ابزارهای خاص برای پیاده‌سازی
      پروژه‌های نرم‌افزاری تمرکز داره (توی سوال شما می‌شه تخصصش بیشتر اندروید هست)
      *از جهت مسئولیت‌ها:*
      مهندس نرم‌افزار: مسئولیت‌های بیشتری در تحلیل نیازمندی‌ها، طراحی معماری سیستم، و تضمین کیفیت نرم‌افزار داره.
      توسعه‌دهنده نرم‌افزار: بیشتر بر روی توسعه و پیاده‌سازی ویژگی‌ها و رفع باگ‌ها تمرکز دارد و معمولاً درگیر کدنویسی و تست نرم‌افزار هست.
      *جمع‌بندی:*
      مهندس نرم‌افزار: کارش طراحی، توسعه، آزمایش و نگهداری سیستم‌های نرم‌افزاری پیچیده هست. مسائل معماری سیستم و زیرساخت‌ها رو بلده و بیشتر وقت‌ها از اصول مهندسی برای اطمینان از کیفیت، قابلیت اتکا بودن و مقیاس‌پذیری سیستم‌ها استفاده می‌کنه.
      توسعه‌دهنده نرم‌افزار: بیشتر به کدنویسی و پیاده‌سازی ویژگی‌ها مشغوله و معمولاً مسئولیت‌های کمتری در زمینه طراحی سیستم‌های بزرگتر دارن.

    • @mychannel-jb3zk
      @mychannel-jb3zk Місяць тому +1

      @@RezaDevs خیلی ممنون

  • @WaffenRex
    @WaffenRex Місяць тому +1

    درود در مورد solid ویدیو انگلیسی و فارسی زیاد دیدم ولی این ویدیو به نظرم شیوا و ساده تر توضیح داده شده بود
    و یه سوال اخر ویدیو گفتید تنها چیزی که خیلی به ذهنم رسید کلاس viewmodel هست 😁😁

    • @RezaDevs
      @RezaDevs  Місяць тому +1

      ممنون از لطف شما 🙏
      در مورد سوالی که پرسیده بودم هم ویومدل کلاسی هست که چند سال اخیر اضافه‌اش کردن و از لحاظ تک وظیفه‌ای بودن اتفاقا کارش درسته و فقط داره یک کار انجام می‌ده 😄

    • @WaffenRex
      @WaffenRex Місяць тому

      @@RezaDevs
      ممنونم بابت پاسخ
      ولی چرا ویومدل کلاس من همه کار میکنه
      😁😁😁😁😁😁
      یک سوال در مورد تاریخ میتونم بپرسم
      یه مشکلی دارم وقتی یه تاریخ میلادی رو با لایبراری موجود تبدیل میکنم به هجری و قمری بین این دوتا تاریخ(قمری و شمسی ) یک روز اختلاف هست البته میدونم یه ماه های خاص هست مثل زمضان ولی این مشکل برای ماه های دیگه هم هست و من راه منطقی پیدا نکردم

    • @RezaDevs
      @RezaDevs  Місяць тому +1

      شاید سوال رو خوب دقت نکردید. پرسیده بودم توی اس‌دی‌کی خود اندروید چه کلاسی ایراد داره. کلاس ویومدلی که خود اندروید معرفی کردند یه کلاس ابسترکت هست که فقط داره لاجیک مربوط شدن به کلیر شدن ویومدل رو هندل می‌کنه و از این نظر کارش محدود به مفهوم ویومدل هست. اینکه ما توی برنامه‌مون ویومدلی می‌سازیم که کلی کار انجام می‌ده اون می‌شه مشکل ویومدل ما که با اصل تک وظیفه بودن سازگار نیست. (که از این جهت می‌شه گفت شما درست اشاره کردید)
      در مورد تاریخ قمری: تا بوده همین مشکل بوده. اگر دقت کنید یه سری برنامه‌های غیر آنلاین توی تنظیماتشون یه گزینه می‌ذارن که کاربر دستی تاریخ قمری رو یک تا حتی سه روز بتونه عقب جلو بکنه تا درست دربیاد. برنامه‌های آنلاین هم که می‌تونن با سرور چک کنن و تبدیل تاریخ رو از اونجا بگیرن یا یک ای پی آیی که معتبر هست.

    • @WaffenRex
      @WaffenRex Місяць тому

      @@RezaDevs
      در مورد اول شوخی کردم 😁😁
      ولی بازم خیلی ممنون که توضیح دادید زیبا و شیوا بود
      در مورد سوال بعدیم
      پس اینجوریه فکر میکردم من پیدا نکردم راه حلی
      یه سوال کوجیک دیگه این مورد اختلاف تاریخ ثابت نیست
      درسته؟ یعنی تو هر سال تغییر میکنه؟
      بازم ممنونم که با حوصله پاسخ میدید

    • @RezaDevs
      @RezaDevs  Місяць тому

      بله. ثابت نیست. همونطور که خودتون سر ماه رمضان می‌دونید، چون با چشم باید ماه روئیت بشه ممکنه تعداد روزهای ماه تغییر بکنه و برای همین محاسبات اون سال همه یک روز شیفت می‌شه جلو یا عقب.

  • @Jkjk-pu2vt
    @Jkjk-pu2vt Місяць тому +1

    شما به عنوان یه متخصص اندروید ایا اینکارو تایید میکنید ؟منه تازه کار برای اینکه دانشم بیشتر بشه برم و سورس کامپوز رو تیکه تیکه بخونم به 2 دلیل : 1- بهتر شدن کد زدنم در کاتلین 2 - درک بهتر از ui در اندروید

    • @RezaDevs
      @RezaDevs  Місяць тому

      کلا خوندن سورس کد دیگران خیلی کمک می‌کنه برای اینکه بیشتر یاد بگیریم و با دست خط دیگران هم آشنا بشیم. اگر نمونه کدهای کامپوز که توسط خود گوگل نوشته شده رو بخونید که چه عالی
      پیشنهاد می‌کنم یه نگاهی هم به این ریپازیتوری خود گوگل بندازید:
      github.com/android/sunflower