دوره عملی الگوها، اصول و تکنیک‌های Clean Code

محل برگزاری مدرس تاریخ شروع اولین جلسه روز و ساعت مدت زمان کل دوره تعداد جلسات هزینه ثبت‌نام زود هنگام هزینه ثبت‌نام عادی لینک ثبت نام
آنلاین مسعود بهرامی 1 دی 1399 2شنبه‌ها ساعت 17:30 تا 20:30 21 ساعت 7 جلسه 3 ساعته 800000 هزار تومان 120000 هزار تومان ثبت ‌نام

این دوره مخصوص چه افرادی است؟


توسعه‌دهندگان، طراحان و معماران نرم‌افزار و همچنین CTOها و Team Leader هایی که دغدغه توسعه یک نرم‌افزار با کیفیت بالا را دارند.

مزایای شرکت در دوره


این دوره بصورت آنلاین برگزار می‌شود. و ویدئوها و فایل‌های تمامی جلسات در اختیار شرکت‌کنندگان قرار می‌گیرد. در نتیجه در صورتی که نتوانید در یک جلسه شرکت کنید قادر خواهید بود ویدئوی آن جلسه را پس از پایان جلسه در اختیار داشته باشید.

همچنین گروه پشتیبانی جهت پاسخ به سوالات و راهنمایی دانشجویان، در طول دوره برای تمامی شرکت کنندگان وجود دارد.

پیش‌نیازهای دوره


مخاطبین برای شرکت در این دوره نیاز می‌باشد که تجربه برنامه نویسی داشته باشند و با مفاهیم پایه و ابتدایی برنامه نویسی شی‌گرا آشنا باشند.

ابزارها، تکنولوژی‌های و زبان برنامه‌نویسی مورد استفاده در دوره


این دوره آموزشی به زبان برنامه‌نویسی و یا تکنولوژی خاصی وابسته نیست و محتوای آن قابل پیاده‌سازی در تمامی زبان‌های برنامه‌نویسی شی‌گرا می‌باشد.

در این دوره برای پیاده‌سازی پروژه‌ها و کد‌ها از زبان برنامه‌نویسی #C و پلت فرم dot net core استفاده می‌کنیم.

برخی از لایبرری‌های مورد استفاده در طول دوره:

  • AsyncFixer
  • Sonarlint
  • C# Code Analyzer (Roslyn)
  • #Code Cracker for C
  • Hot Commands
  • Moq
  • FakeItEasy
  • NSubstitute
  • ‌ AutoFixture
  • NBuilder
  • FluentAssertions
  • NFluent
  • Ncrunch
  • FluentAssertions.Json

معرفی دوره


این دوره با هدف آموزش مهمترین الگوها، اصول و روش‌های Clean Code طراحی شده است. در این دوره ما به اصول حرفه‌ای گری و استادکاری (Craftsmanship) در نرم‌افزار و لزوم اهمیت آن و ارتباط آن با Clean Code می‌پردازیم و همچنین بر اهمیت و لزوم اصول حرفه‌ای گری در توسعه نرم‌افزار خواهیم پرداخت. سپس در قالب پروژه و تمرین‌ها و چالش‌ها به پیاده سازی مباحث و سرفصل‌ای زیر خواهیم پرداخت.

در طی دوره از زبان #C برای پیاده‌سازی کدها استفاده می‌کنیم، اما مباحث و مطالب دوره برای هر زبان شی‌گرای دیگری نیز قابل استفاده و اعمال می‌باشد.

برای این دوره چالش‌ها و مسائل مختلف و بسیار زیادی در نظر گرفته شده، و دانشجویان با حل کردن و پیاده سازی این چالش‌ها و مسائل می‌توانند با هدایت و آموزش معلم خود به تسلط بیشتر و بهتری بر مطالب ارائه شده دست پیدا کنند.

همچنین در طول دوره چندین جلسه رترو جهت بحث و تبادل نظر و تعمق بیشتر بصورت گروهی برگزار خواهد شد.

سرفصل‌های دوره


  • کد کثیف به چه معنی است؟
  • چرا باید کد را تمیز کنیم و تمیز نگه داریم؟
    • دلایل و مزیت‌های استفاده از اصول و قواعد Clean Code
  • Software Craftsmanship
    • توسعه رفتار حرفه ای فردی و استادکاری
    • حرفه‌ای گری، استادکاری و Clean Code
  • معیارهای و فاکتورهای کد خوب و بد
  • تبدیل کد بد به کد خود
  • شناسایی رایحه‌های بد در کد
    • Mysterious Name
    • Duplicated Code
    • Long Function
    • Long Parameter List
    • Global Data
    • Mutable Data
    • Divergent Change
    • Shotgun Surgery
    • Feature Envy
    • Data Clumps
    • Primitive Obsession
    • Repeated Switches
    • Loops
    • Lazy Element
    • Speculative Generality
    • Temporary Field
    • Message Chains
    • Middle Man
    • Insider Trading
    • Large Class
    • Data Class
    • Refused Bequest
    • Comments
    • Alternative Classes with Different Interfaces
  • نگاهی دقیق تر به قانون Boy Scout جهت تمیز کردن تدریجی کدهای موجود
  • نام گذاری صحیح
    • ضرورت و اهمیت انتخاب نام گذاری مناسب
    • نگاهی به نام گذاری متغیر‌ها، متدها و کلاس‌ها به عنوان یک ابزار ارتباطی بین اعضای تیم
    • معرفی اصول و قواعد نام‌گذاری برای متغیرها، متدها، کلاس‌ها و اینترفیس‌ها
  • بررسی و یادگیری نحوه ساختار بندی متدها در یک کلاس
  • اصول، قواعد و تکنیک‌های نوشتن متدهای(توابع) تمیز
    • Small!
    • بررسی مفهوم توابعی که فقط یک کار انجام می‌دهند
    • سطوح انتزاع در متد‌ها و تاثیر آن در خوانایی، فهم و نگهداری کد
    • عبارت Switch
    • قواعد نام‌گذاری صحیح و انتخاب نام‌های خوش تعریف برای توابع
    • آرگومان‌های توابع
    • بررسی دقیق مفهوم Side-Effect
    • Command-Query Seqregation
    • بررسی اصل Don’t Repeat Yourself
    • نگاهی به مفهوم Fail fast در توابع
      • مقایسه و بررسی برگرداندن Error Code یا پرتاب کردن Exception در توابع
    • Return Early
    • Mayfly variables
  • مقایسه سبک برنامه نویسی شی‌گرا و پروسیجرال
    • Data Abstraction
    • جریان کنترل برنامه
    • Data/object anti-symmetry
    • The low of Demeter
    • Data Transfer Object
    • بررسی اصول برنامه‌نویسی شی‌گرا
      • Messaging
      • Polymorphism
      • Encapsulation
      • Abstraction
      • Inheritence
      • مقایسه Inheritance و Composition
  • اصول، قواعد و تکنیک‌های نوشتن کلاس‌های تمیز
    • Cohesion
    • Coupling
    • Single Responsibility Rule
    • Isolation from change
    • Outline Rule
    • Primitive Obsession
    • اصل Proximity در تعریف کلاس‌ها
    • بررسی کلاس‌ها از نقطه نظر اندازه
      • کلاس‌هایی که بیش از حد کوچک هستند
      • کلاس‌هایی که بیش از حد بزرگ هستند
    • Separation of Main
    • Dependency Injection
    • Cross-Cutting Concern
    • Optimize Decision Making
  • بررسی دقیق اصول کامنت‌ گذاری صحیح و تمیز در کد
    • کامنت گذاری به عنوان یکی از رایحه‌های کد بد
    • احساسات درونی فرد توسعه دهنده و کامنت‌ها
    • Bloated Header
    • کامنت‌های خوب
    • کامنت‌های بد
    • کامنت‌های تمیز
    • Defect Log
    • کامنت‌‌های بیش از اندازه بزرگ یا کوچک
    • کامنت‌های اضافی و غیر ضرور
    • Zombie Code
    • Necessity and Crunch
    • تبدیل کامنت‌ها به داکیومنت
  • بررسی فرمت بندی و استایل کد نویسی و تاثیر آن بر خوانایی و نگهداری کد
    • منظور از فرمت و استایل کد نویسی چیست؟
    • چرا باید نسبت به فرمت کد حساس بود؟
    • فرمت بندی افقی
    • فرمت بندی عمودی
    • Team rules
    • قوانین فرمت و نگارش کد آقای Uncle Bob
  • بررسی مکانیزم‌ها و تکنیک‌های کنترل خطا در سطوح مختلف برنامه
    • بررسی مشکلات نوع برگشتی نال توسط توابع
    • بررسی مکانیزم‌های Exception خطا در لایه‌های مختلف برنامه
    • بررسی موارد استفاده نابجا و غیر صحیح از Exception
    • تعریف و مهیا کردن Context مناسب در Exeptionها
    • تریف کلاس Exception از دید استفاده کننده از کلاس
  • تست‌های واحد (Unit Testing) و TDD
    • سه قانون آقای Uncle Bob در مورد TDD
    • نوشتن تست‌های تمیز
    • بررسی رابطه تعداد Assertها موجود در هر سناریوهای Test
    • Testهای تمیز
    • F.I.R.S.T
  • Emergent Design
    • ضرورت و اهمیت Emergent Design در دنیای نرم‌افزار
    • اصول و قوانین Simple Design
    • طراحی کلاس‌ها و متدهای کوچک
  • بررسی دقیق مسائل مرتبط با همزمانی و چند نخی از دید Clean Code
    • بررسی باورها و برداشت‌های غلط در مورد همزمانی و چند نخی
    • بررسی اصول Concurrency Defense
    • بررسی دقیق وابستگی‌ها بین متدهایی که باید با هم Sync باشند
    • نوشتن تست برای بخش‌های که از چند نخی استفاده میکنند
    • نوشتن تست برای بخش‌های که از همزمانی استفاده میکنند
  • معرفی و آشنایی با مهمترین و متدوال‌ترین Heuristic‌ها در طراحی و برنامه نویسی شی گرا و کد تمیز
  • شناسایی و حذف dead codeها
  • تشخیص و حذف کدهای تکراری
  • تعریف پیاده‌سازی و محاسبه متریک‌های ارزیابی سلامت کد و اطمینان از بهبود یافتن کدها
  • الگوهای کلاسیک طراحی شی‌گرا
    • Creational Patters
      • Abstract Factory
      • Builder
      • Factory Method
      • Prototype
      • Singleton
    • Structural Patters
      • Adapter
      • Bridge
      • Campsite
      • Decorator
      • Façade
      • Flyweight
      • Proxy
    • Behavioral Patters
      • Chain of Responsibility
      • Command
      • Interpreter
      • Iterator
      • Mediator
      • Memento
      • Observer
      • State
      • Strategy
      • Template Method
      • Visitor
    • نگاهی به Service Locator به عنوان یک ضد الگو
    • بررسی اصول 5 گانه S.O.L.I.D
      • اصل Single Responsibility
      • اصل Open-Closed
      • اصل Liskove Substitution
      • اصل Interface Segregation
      • اصل Dependency Inversion
    • General Responsibility Assignment Software Patterns(GRASP)

در خبرنامه عضو شوید